是否可以从构造函数的子类型中调用函数?请看一个例子
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/