以下Java代码的Kotlin等效项是什么?
class Test {
Class<? extends Number> types = new Class[] {
Integer.class, Long.class, Short.class, Byte.class, Float.class, Double.class
};
}
答案 0 :(得分:1)
您可以使用out
关键字:
var types: Array<Class<out Number>> = arrayOf(
Integer::class.java,
Long::class.java,
Short::class.java,
Byte::class.java,
Float::class.java,
Double::class.java
)
out
修饰符用于指示协方差(类似于Java中的? extends T
)。 协方差-是将通用类型参数从类更改为其父级之一的功能,即将List<String>
分配给List<Any>
。
答案 1 :(得分:1)
这里您需要的是协变量数组,或通用参数上的out
方差:
var types: Array<Class<out Number>> = arrayOf(
Int::class.java,
Long::class.java,
Short::class.java,
Byte::class.java,
Float::class.java,
Double::class.java
)
documentation of this method下的文档中介绍了这种情况(尽管如果您不熟悉它,可能要花一些时间才能弄清所有内容)。
答案 2 :(得分:0)
除了其他答案外,您还可以使用Kotlin数据类型在Kotlin中生成相同的代码;
var types: Array<KClass<out Number>> = arrayOf(
Int::class,
Long::class,
Short::class,
Byte::class,
Float::class,
Double::class
)
在这里,我们使用KClass
这是Kotlin类的引用类型,而out
是协方差类型注释(生产者)。