Пользовательская стратегия доступа для Clojure `from-java` - PullRequest
3 голосов
/ 03 февраля 2020

Есть ли способ настроить стратегию доступа, используемую в clojure.java.data/from-java? from-java является частью java.data lib .

. Я недавно обновил библиотеку третьего уровня Java, которая использовалась для следования JavaBean get и set шаблон. Однако после обновления они перешли с getProperty() на property() ...

Полагаю, это изменение делает функцию from-java непригодной в этом случае, что неудивительно, поскольку объекты больше не являются собственными JavaBeans .

Есть ли способ from-java узнать об этом шаблоне доступа или есть какие-либо другие рекурсивные механизмы отображения, поддерживающие это?

Ответы [ 3 ]

2 голосов
/ 03 февраля 2020

Кажется, вам придется расширить мультиметод для поддержки классов самостоятельно, однако, вы, вероятно, можете использовать рефлексию (медленно, я знаю), чтобы создать что-то очень общее c:

  • Для заданный экземпляр объекта, найдите его класс, затем класс 'DeclaredFields, и из каждого поля получите свое имя и тип
  • . Для того же экземпляра используйте .getDeclaredMethod или .getDeclaredMethods, чтобы найти методы для имя, которое не содержит параметров (используйте для этого пустой массив). Эти методы должны быть новыми «получателями», и вы можете вызывать их в своем экземпляре для извлечения значений.
2 голосов
/ 03 февраля 2020

from-java - это мультиметод, можете ли вы переопределить его для любого класса, который вам нравится. Нет механизма для обучения этому соглашению об альтернативном именовании (и если бы существовал такой механизм, я думаю, у него были бы проблемы с «каждый метод с любым именем вообще представляет свойство»). Поэтому вам придется написать ручных преобразований , но по крайней мере рекурсия будет обработана для вас.

1 голос
/ 05 февраля 2020

Используйте взамен Cognitect aws -api :)

...