Kotlin引入了inline class,它是强类型别名。与数据库一起使用时,这很有用。例如,
inline class Age(val value: Int)
inline class Height(val value: Int)
[将它们写入数据库时,它们会编译为Int
,但是Kotlin可以防止您不小心将Height
放入Age
字段。如果直接使用类型别名或Int
,则可以使用类型别名,但内联类会产生编译时错误。
但是,这些也会引起Android数据绑定问题。当我尝试将data binding error
内联类绑定到String
属性时,得到String
。
虽然可以编写某些类型的适配器来绕过此操作,但它违背了使用内联类的目的,对于为所有内联类创建适配器都不实用。
我想问问有没有解决此问题的优雅方法?
首先需要了解的是,内联类不仅是原始类型的包装。它们不仅仅是类型别名。
现在来看您的示例,即使DataBinding
知道如果将任何MutableLiveData<T>
实例放在xml
中,它将采用该特定变量的值(类似于mutableLiveData.value
)。但是,如果您输入MutablLiveData<Age>
,则mutableLiveData.value
将始终是Age
类型,而不是Int
类型。
请注意,inline class
创建一个全新的类型,而不仅仅是类型别名。
我相信您在某种程度上需要数据绑定中的方法,该方法返回内联类对象中包含的值。