Взгляните на методы java.lang.Class и на API отражения: java.lang.reflect. *

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

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

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

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

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

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

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

Спасибо!

Ответы на вопрос(3)

Ваш ответ на вопрос