我试图制作抽象类进行测试,因为我发现使用泛型的奇怪问题
abstract class Test<T> {
open fun hello(vararg data: T) {
print("Default function")
}
}
Run Code Online (Sandbox Code Playgroud)
这个非常简单的抽象类有一个带有vararg关键字的打开方法。可以通过创建另一个扩展Test类的类来重现问题。
class Hello : Test<Int>() {
//Problem 1
override fun hello(vararg data: Int) {
super.hello(*data) //Problem 2
println("Override function")
}
}
Run Code Online (Sandbox Code Playgroud)
关于第一个问题,Kotlin 说方法不会覆盖任何东西,即使这个方法肯定会覆盖某些东西。奇怪的是,这个错误是随机发生的,所以我不知道重现这个错误的确切方法
当我添加一些代码(例如非常简单的代码,例如println()等)时,此错误已被删除,但是当您编译时,它再次导致相同的错误。
关于第二个问题,super.hello(*data)导致问题,因为这需要Array<out Int>,但发现参数是IntArray。我认为 Kotlin 正在考虑IntArray并Array<*>作为不同的类,但它不应该像这样......
我正在使用 Kotlin 1.4.10,根据本网站,它似乎是最新版本。
我发布这个是为了检查这两个问题是否是错误,或者我是否做错了什么,因为当我将 generic 更改为 时String,所有问题都会被删除。我在上面的这些示例代码中有什么错误吗?
已知问题:https ://youtrack.jetbrains.com/issue/KT-9495
作为解决方法,您可以使用盒装java.lang.Integer.
class Hello : Test<Integer>() {
override fun hello(vararg data: Integer) {
super.hello(*data)
println("Override function")
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |