我可以在Kotlin中实例化一个使用递归泛型的具体Java类吗?实例化一个在Kotlin中使用递归泛型的具体Java类
详细
我试图实例使用类似于下面的例子递归泛型的Java类。我发现了一个将Java类封装在新类中的工作,但是这感觉就像是我回避了一个我应该能够直接处理的问题。
的Java类递归泛型
public class MyLegacyClass<T extends MyLegacyClass<T>> {
// implementation ...
}
它是如何在Java中实例化
// In Java we just ignore the generic type...
MyLegacyClass myLegacyClass = new MyLegacyClass();
失败的尝试在科特林
class myClass {
// Error: One type argument expected for class...
val x: MyLegacyClass = MyLegacyClass()
// Still 'Error: One type argument expected for class..' You start to see the problem here.
val y: MyLegacyClass<MyLegacyClass<MyLegacyClass<MyLegacyClass>>> = MyLegacyClass()
}
01来实例化
科特林解决方法
class MyLegacyClassWrapper : MyLegacyClass<MyLegacyClassWrapper>()
class myClass {
val x: MyLegacyClass<MyLegacyClassWrapper> = MyLegacyClassWrapper()
}
以这种方式用Java实例化它是一个坏主意,请参阅https://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html。 –
@AlexeyRomanov我指出使用原始类型实例化一个通用对象是个坏主意? (如果是的话,我同意,我只是想确保我理解你的意见) –
是的(作为一个更一般的声明,使用原始类型的一个具体例子是一个坏主意,除非你有要求保持与Java之前的兼容性-5代码/ JVM)。 –