我正在寻找围绕Java库创建Kotlin包装器的设计决策。我面临的一个问题是,库中的POJO都不遵循用于getter和setter的常规Java Bean约定。
Kotlin可以推断遵循正常的getter / setter约定的Java对象的属性:
遵循getter和setter的Java约定的方法(名称以get开头的无参数方法和名称以set开头的单参数方法)在Kotlin中表示为属性。布尔访问器方法(getter的名称以is开头,setter的名称以set开头)表示为与getter方法具有相同名称的属性。
(请参见here)
但是对于该库,所有POJO都具有getter和setter,它们只是字段的名称,而不是getField / setField,因此Kotlin无法推断属性访问语法。
包装这些对象并使用普通Kotlin约定的最干净方法是什么?
似乎使用扩展方法实现正确的getter和setter方法无法启用属性访问语法(我猜这是因为在内部,扩展方法已转换为静态实用程序类,并且扩展类并未实际修改)。 / p>
有哪些替代方法?
答案 0 :(得分:4)
您可以将扩展名 properties 设为扩展名方法。
val Foo.bar: Bar
get() = someOtherWayOfGettingBar()