[英]How does Generic work if generic is Int in Kotlin?
我试图制作抽象 class 进行测试,因为我发现使用 generics 有奇怪的问题
abstract class Test<T> {
open fun hello(vararg data: T) {
print("Default function")
}
}
这个非常简单的摘要 class 有一个带有vararg关键字的打开方法。 可以通过制作另一个扩展测试class 的 class 来重现问题。
class Hello : Test<Int>() {
//Problem 1
override fun hello(vararg data: Int) {
super.hello(*data) //Problem 2
println("Override function")
}
}
关于第一个问题,Kotlin 说方法不会覆盖任何内容,即使此方法肯定会覆盖某些内容。 奇怪的是,这个错误是随机发生的,所以我不知道重现这个错误的确切方法
当我添加一些代码(比如println()
等非常简单的代码)时,这个错误被删除了,但是当你编译时,它再次导致同样的错误。
关于第二个问题, super.hello(*data)
导致问题,因为这需要Array<out Int>
,但找到的参数是IntArray
。 我认为 Kotlin 正在考虑IntArray
和Array<*>
作为不同的 class,但它不应该像这样......
我正在使用 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")
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.