这是我试图解决的问题,我试图使用void类型作为泛型类型:
class Parent {
private abstract class Item<out T>(val data: T)
// This subclass should contain data
private class ItemContent(val data: String): Item<String>(data)
// This subclass doesn't contain data
private class ItemNoContent: Item<Any?>(null)
}
Run Code Online (Sandbox Code Playgroud)
像ItemNoContent这样的基类不包含有意义的数据,因此我使ItemNoContent扩展Item(null).它有效,但我觉得使用Any?和null在这里不合适.是否有更多的Kotlin方法来解决这个可选的通用问题?
一些像 ItemNoContent 这样的基类不包含有意义的数据
那么为什么要扩展一个应该拥有它的类呢?虽然Unit和null都是选项,但也要考虑
private abstract class Item<out T>
private abstract class ItemWithContent<out T>(val data: T) : Item<T>
...
// object may make more sense than class here
private object ItemNoContent : Item<Nothing>()
Run Code Online (Sandbox Code Playgroud)
我会像这样调整继承:
abstract class Item
abstract class ItemWithContent<T>(val d: T): Item()
class ItemWithStringContent(d: String): ItemWithContent<String>(d)
class ItemWithNoContent: Item()
Run Code Online (Sandbox Code Playgroud)
这样就不需要使用Unitor了Nothing。
用法:
fun main(args: Array<String>){
val t: Item = ItemWithStringContent("test")
println((t as? ItemWithStringContent)?.d)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2215 次 |
| 最近记录: |