Имитация утиного набора текста в Java

Проблема: Я хотел бы иметь общий доступ к в Java любому свойству / полю в Java ojbect аналогичным образом как динамический язык (например, Groovy, JavaScript). В то время, когда я пишу этот водопроводный код, я не знаю, какой это тип объекта или какое будет имя свойства / поля. Но я буду знать имя свойства / поля, когда буду использовать его.

Мое текущее решение: До сих пор я написал простой класс-оболочку, который использует java.beans.Introspector для возьмите свойства Bean / POJO и представьте их как Map . Это грубо, но работает для простых случаев.

Мой вопрос : какие еще существуют методологии для решения этой проблемы, помимо отражения / преобразования в карту?

Прежде чем я пойду слишком далеко по этому пути, я бы хотелось бы знать, знает ли кто-нибудь, как я могу каннибализировать что-то из Rhino или, возможно, javax.script. * , в котором есть хорошо продуманная реализация этой концепции. Или, возможно, совершенно другой подход, который я не рассматривал.

Edit: да, я ' Я знаком с рефлексией (я считаю, что это то, что Introspector в любом случае использует под капотом). Мне было просто любопытно, есть ли другие хорошо продуманные решения.

Редактировать 2: Похоже, что наиболее популярные ответы включают 1) отражение либо напрямую, либо через вспомогательные классы, и / или 2) отображение на интерфейсы, которые реализовать желаемые члены класса. Меня действительно заинтриговал комментарий, в котором говорится об использовании Groovy. Поскольку в Groovy есть настоящая утиная типизация и это язык JVM, есть ли способ создать простой помощник в Groovy и вызвать его из Java? Это было бы действительно круто и, вероятно, более гибко и работало бы лучше.

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

Спасибо!

10
задан mckamey 2 December 2010 в 22:44
поделиться