此Java代码的kotlin等效项是什么?
private A typeA;
private B typeB;
public Test(){
typeA = createType();
typeB = createType();
}
private <T extends A & B> T createType(){
return null;
}
我尝试使用Kotlin转换器。我无法调用createType()。
如何实现?
答案 0 :(得分:0)
很难从示例中了解意图,但是这里是如何表达双重上限的方法:
interface A
interface B
fun <T> createType():T where T : A, T : B {
return TODO()
}
但这与您的用法示例不兼容:
fun test() {
val typeA: A = createType() // error
val typeB: B = createType() // error
}
如果A
不是B
的子类型,那怎么办?也许有一个更现实的用法示例?
答案 1 :(得分:0)
这就是Kotlin的样子:
private var typeA: A? = null
private var typeB: B? = null
fun test() {
typeA = createType<C>()
typeB = createType<C>()
}
private fun <T> createType(): T? where T : A, T : B {
return null
}
open class A
interface B
class C: A(), B
请注意,where
子句中最多只能有一个类,其余的必须是接口,并且在调用createType
时,需要提供满足范围的类型参数(在这种情况扩展了A
并实现了B
)
答案 2 :(得分:0)
不是您真正想要的,但是您的Java示例已经可以简化为:
private <T> T createType(){
return null;
}
由于您的typeA
和typeB
已经众所周知,因此也可以使用。
在Kotlin中可以轻松地将其转换为以下内容:
fun <T> createType() : T = TODO("implement me")
如果您提供有关为什么真正需要T extends A & B
的更多信息,答案可能会更好。