在java中
我可以实现两个像
public TargetTitleEntryController() { }
public <T extends Controller & TargetTitleEntryControllerListener> TargetTitleEntryController(T targetController) {
setTargetController(targetController);
}
Run Code Online (Sandbox Code Playgroud)
我想将其转换为Kotlin
class TargetTitleEntryController ()
Run Code Online (Sandbox Code Playgroud)
与辅助构造函数。我不知道如何用Java对应的泛型类型声明。
小智 9
Kotlin 中没有交集类型(悲伤)
但存在通用约束(希望)
但通用约束不适用于辅助构造函数(悲伤)
但是您可以使用Invoke 运算符重载(解决方法)在伴生对象中模拟辅助构造函数:
class TargetTitleEntryController {
// ...
companion object {
operator fun <T> invoke(targetController: T): TargetTitleEntryController
where T : Controller,
T : TargetTitleEntryControllerListener {
return TargetTitleEntryController().apply {
setTargetController(targetController)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
下面是一个示例,其中指定T实现两个接口 ( CharSequence、Runnable) 的 Type:
class Person<T>(val name: String) where T : CharSequence, T : Runnable {
constructor(name: String, parent: T) : this(name) {
}
}
Run Code Online (Sandbox Code Playgroud)
所以实际上这样的事情应该有效:
class TargetTitleEntryController<T> () where T : Controller, T : TargetTitleEntryControllerListener {
constructor(targetController: T) : this() {
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
324 次 |
| 最近记录: |