Проблема: Я хотел бы иметь возможность общего доступа в Java к любому свойству/полю Java ojbect так же, как и к динамическому языку (думаю, Groovy, JavaScript). Я не буду знать, когда я пишу этот сантехнический код, какой тип объекта он или что имя свойства/поля. Но я буду знать имя свойства/поля, когда я его использую.
Мое текущее решение: До сих пор я написал простой класс-оболочку, который использует java.beans.Introspector
, чтобы захватить свойства Bean/POJO и выставить их как Map<String, Object>
. Он грубоват, но работает для простых случаев.
Мой вопрос заключается в том, что существуют другие методологии для решения этой проблемы, кроме отражения/преобразования на карту?
Прежде чем я пойду слишком дальше по этому пути, я хотел бы знать, знает ли кто-нибудь, как я могу cannibalize что-то из Rhino или, возможно, javax.script.*
, у которого хорошо продуманная реализация этой концепции. Или, возможно, совсем другой подход, который я не рассматривал.
Изменить: да Я знаком с отражением (я считаю, что Introspector использует под капотом в любом случае). Мне было просто любопытно, были ли какие-то другие хорошо продуманные решения.
Изменить 2:. Похоже, что наиболее популярные ответы включают в себя 1) отражение либо напрямую, либо через вспомогательные классы, и/или 2) сопоставление с интерфейсами, которые реализуют требуемые члены класса. Я действительно заинтригован комментарием, в котором говорится об использовании Groovy. Поскольку Groovy имеет истинное утиное печатание и это язык JVM, есть ли способ сделать простой помощник в Groovy и вызвать его из Java? Это было бы действительно здорово и, вероятно, было бы более гибким и лучше работать.
Ответ: Я отметил, что Майк отвечает как лучший, поскольку это полная концепция, которая приближается. Я, вероятно, не поеду по этому пути, но это, безусловно, полезный подход. Любой, кто просматривает это сообщение, должен обязательно прочитать разговоры здесь, так как здесь есть много полезной информации.
Спасибо!