是否可以从构造函数的子类型中调用函数?请看一个例​​子

class Dog(animalType: DogType) : Animal(animalType) {
    fun doSomething() {
        animalType.runDogTypeFunction() // error but animalType is always DogType
    }
}

abstract class Animal(val animalType: AnimalType)
interface AnimalType

enum class DogType() : AnimalType {
    DOG1, DOG2;
    fun runDogTypeFunction() {}
}

enum class CatType() : AnimalType {
    CAT1, CAT2;
    fun runCatTypeFunction() {}
}


animalType是const(val),因此它始终是DogType。我不明白为什么我不能从DogType类中调用方法。
我尝试覆盖val,但收到了NPE

最佳答案

您的属性在动物基类中声明(作为AnimalType)。调用doSomething时,Dog中的构造函数参数不存在。

您可以尝试这样的事情:

abstract class Animal<T: AnimalType>(val animalType: T)

class Dog(animalType: DogType) : Animal<DogType>(animalType) {
    fun doSomething() {
        animalType.runDogTypeFunction()
    }
}

关于kotlin - 无法从构造函数的子类型调用函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58418077/

10-11 12:56