我正在尝试创建一个配置属性列表,每个配置属性都有一个名称和一个Any类型的值。可能是数字,字符串,布尔,枚举等。我在向列表中添加新的GameConfigProp时遇到问题。
Type mismatch.
Required: GameConfigProp<Any>
Found: GameConfigProp<T>
configProps.add(p)抛出编译时错误:
USHRT_MAX
答案 0 :(得分:0)
您必须指定通用类型参数T
扩展Any
类型。
如果未指定,则编译器会假定也可以使用可为空的Any?
。
但是您的道具只允许使用不能为null的类型。
并且您需要将out
列表的类型投影指定为configProps
:
private val configProps = mutableListOf<GameConfigProp<out Any>>()
fun <T : Any> addProp(name: String, value: T) : GameConfigProp<T>{
val p = GameConfigProp(name, value)
configProps.add(p)
return p
}
现在它将编译。但请注意,in
列表中的元素无法访问GameConfigProp
的{{1}}-侧需要T的所有方法。 configProps
无法编译