繁体   English   中英

如果 Kotlin 中的泛型是 Int,泛型如何工作?

[英]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 说方法不会覆盖任何内容,即使此方法肯定会覆盖某些内容。 奇怪的是,这个错误是随机发生的,所以我不知道重现这个错误的确切方法

Kotlin 无法识别代码

当我添加一些代码(比如println()等非常简单的代码)时,这个错误被删除了,但是当你编译时,它再次导致同样的错误。

关于第二个问题, super.hello(*data)导致问题,因为这需要Array<out Int> ,但找到的参数是IntArray 我认为 Kotlin 正在考虑IntArrayArray<*>作为不同的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM