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