目标
有一个函数Book
,它将三个Letter类中的一个作为参数myClass
,然后从Letter*()
继承的抽象类中调用'genericMethod()'。
问题
如果我尝试Book(LetterA()).read()
,我会得到以下错误:Type mismatch. Required: Class<SampleClassArguments.Alphabet> Found: SampleClassArguments.LetterA
Kotlin有什么办法达到这个结果吗?
代码
@Test
fun readBookTest() {
Book(LetterA()).read() /*<--error here*/
}
class Book(val myClass: Class<Alphabet>) {
fun read() {
val letterClass = myClass.getConstructor().newInstance()
letterClass.genericMethod(myClass.name)
}
}
class LetterA(): Alphabet()
class LetterB(): Alphabet()
class LetterC(): Alphabet()
abstract class Alphabet {
fun genericMethod(className: String) {
println("The class is: $className")
}
}
1条答案
按热度按时间nwsw7zdq1#
您需要使用
out
关键字将Class类型定义为协变,这样任何子类都是可接受的参数:当你使用它的时候,你需要传递的是实际的类,而不是类的一个示例。你可以通过在类的名字上调用
::class.java
来获得类: