Kotlin引入了inline class,它是强类型别名。与数据库一起使用时,这很有用。例如,
inline class Age(val value: Int)
inline class Height(val value: Int)
将它们写入数据库时,它们会被编译为
Int
,但是Kotlin可以防止您不小心将Height
放入Age
字段。如果直接使用类型别名或Int
,则可以使用类型别名,但内联类会产生编译时错误。但是,这些也会导致Android数据绑定(bind)出现问题。当我尝试将
data binding error
内联类绑定(bind)到String
属性时,我得到String
。虽然可以编写某种适配器来绕过此操作,但是它无法达到使用内联类的目的,并且不适合为所有内联类创建适配器。
我想问一下有什么优雅的方法可以解决这个问题吗?
最佳答案
您需要了解的第一件事是内联类不仅是原始类型的包装。它们不仅仅是类型别名。
现在来看您的示例,即使DataBinding
知道如果将任何MutableLiveData<T>
实例放在xml
中,它将采用该特定变量的值(类似于mutableLiveData.value
)。但是,如果您输入MutablLiveData<Age>
,mutableLiveData.value
将始终为Age
类型,而不是Int
类型。
注意inline class
会创建一个全新的类型,而不仅仅是类型别名。
我相信您在某种程度上需要数据绑定(bind)中的方法,该方法返回内联类对象中包含的值。
关于android - 如何将Kotlin内联类与Android数据绑定(bind)集成在一起?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54139949/