Kotlin可选通用参数
以下是我试图解决的问题,我试图使用void类型作为泛型类型:Kotlin可选通用参数,kotlin,Kotlin,以下是我试图解决的问题,我试图使用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 co
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)
}
类父类{
私有抽象类项(val数据:T)
//这个子类应该包含数据
私有类ItemContent(val数据:字符串):项(数据)
//此子类不包含数据
私有类ItemNoContent:Item(null)
}
一些基类,比如ItemNoContent,不包含有意义的数据,所以我将ItemNoContent扩展为Item(null)。它的工作,但我觉得使用任何?而null在这里是不合适的。有没有一种更适合Kotlin的方法来解决这个可选的通用问题 您还可以使用
项(单位)
,它表示Kotlin中的无效值
某些基类(如ItemNoContent)不包含有意义的数据
那么为什么要扩展一个应该有它的类呢?虽然<代码>单元< /代码>和<代码> 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>()
私有抽象类项
私有抽象类ItemWithContent(val数据:T):项
...
//在这里,对象可能比类更有意义
私有对象ItemNoContent:Item()
我会像这样调整继承:
abstract class Item
abstract class ItemWithContent<T>(val d: T): Item()
class ItemWithStringContent(d: String): ItemWithContent<String>(d)
class ItemWithNoContent: Item()
什么都不做
做你想做的吗@nicholas.hauschild它不起作用,因为您不能将无赋值给数据
字段。@Pawel但您可以使用无赋值?
并将空赋值给数据
。但我认为语义是错误的?我不清楚您什么时候想使用什么都不用?
<代码>单位
在这里更有意义。@Pawel感谢您的澄清!
fun main(args: Array<String>){
val t: Item = ItemWithStringContent("test")
println((t as? ItemWithStringContent)?.d)
}