我有一个接口(Java 中),它采用自引用泛型参数,我想在 Kotlin 中创建一个实现它的对象文字。在 Java 中,我通过不包含泛型类型(不安全)来做到这一点,但我不知道如何在 Kotlin 中做到这一点。
这是一个仅用 Kotlin 编写的示例,但在我的例子中,接口是用 Java 编写的。
interface Generic<V, T : Generic<V, T>> {
fun stuff(x: V)
}
class Test {
// In Java I would write new Generic() { ... }
val v = object : Generic<*, *> {
override fun stuff(x: Object) {
doSomethingThatDoesntCareAboutTypes()
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望能够做的是这样的事情,但它不起作用:
val v = object<T : Generic<*, T>> : T {
override fun stuff(x: Object) {
doSomethingThatDoesntCareAboutTypes()
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做类似的事情而不需要更改接口,该接口位于不同的模块中并且不能轻易更改?
星形投影在使用通用接口时特别有用,但在定义实现时很少有用。(与Java类似?
)。
为了能够定义一个object
实现,Generic
您需要提供满足约束的类型参数。Nothing
特别是所有 Kotlin 类型的子类型,因此您可以编写:
val v = object : Generic<Any, Nothing> {
override fun stuff(x: Any) {
doSomethingThatDoesntCareAboutTypes()
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1255 次 |
最近记录: |