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/

10-10 13:23