Свойства Kotlin Infer на Java Классы, которые не следуют нормальным соглашениям получателя / установщика? - PullRequest
1 голос
/ 19 марта 2019

Я хочу создать оболочку Kotlin вокруг библиотеки Java с некоторыми неудачными проектными решениями.Одна проблема, с которой я сталкиваюсь, заключается в том, что ни один из POJO в библиотеке не следует обычным соглашениям Java Bean для методов получения и установки.

Kotlin может определять свойства объектов Java, которые следуют обычным соглашениям получения / установки:

Методы, которые следуют соглашениям Java для методов получения и установки (методы без аргументов с именами, начинающимися с get, и методы с одним аргументом с именами, начинающимися с set), представлены как свойства в Kotlin.Булевы методы доступа (где имя метода получения начинается с is, а имя метода set начинается с set) представлены как свойства, имена которых совпадают с именем метода get.

(см. здесь )

Но в случае этой библиотеки все POJO имеют геттеры и сеттеры, которые являются просто именем поля, а не getField / setField, поэтому Котлин не может вывести синтаксис доступа к свойствам.

Каким был бы самый чистый способ обернуть эти объекты и использовать обычные соглашения Котлина?

Кажется, что реализация правильных методов получения и установки с помощью методов расширения не включает синтаксис доступа к свойству(Я предполагаю, что это потому, что под капотом методы расширения превращаются в статические служебные классы, а расширенный класс фактически не изменяется).

Какие альтернативы доступны?

1 Ответ

4 голосов
/ 20 марта 2019

Вы можете сделать свойства расширения , точно так же, как методы расширения.

val Foo.bar: Bar
  get() = someOtherWayOfGettingBar()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...