如何将Kotlin内联类与Android数据绑定集成?

问题描述 投票:2回答:1

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

虽然可以编写某些类型的适配器来绕过此操作,但它违背了使用内联类的目的,对于为所有内联类创建适配器都不实用。

我想问问有没有解决此问题的优雅方法?

android kotlin android-databinding
1个回答
0
投票

首先需要了解的是,内联类不仅是原始类型的包装。它们不仅仅是类型别名。

现在来看您的示例,即使DataBinding知道如果将任何MutableLiveData<T>实例放在xml中,它将采用该特定变量的值(类似于mutableLiveData.value)。但是,如果您输入MutablLiveData<Age>,则mutableLiveData.value将始终是Age类型,而不是Int类型。

请注意,inline class创建一个全新的类型,而不仅仅是类型别名。

我相信您在某种程度上需要数据绑定中的方法,该方法返回内联类对象中包含的值。

© www.soinside.com 2019 - 2024. All rights reserved.