問題:動的言語(Groovy、JavaScriptなど)と同じように、Javaオブジェクトの任意のプロパティ/フィールドにJavaで一般的にアクセスできるようにしたいと思います。この配管コードを書いている時点では、それがどのタイプのオブジェクトであるか、またはプロパティ/フィールド名が何であるかはわかりません。しかし、私はそれを使用するときにプロパティ/フィールド名を知っています。
私の現在の解決策:これまでのところjava.beans.Introspector
、Bean / POJOのプロパティを取得し、それらをとして公開するために使用する単純なラッパークラスを作成しましたMap<String, Object>
。粗雑ですが、単純なケースで機能します。
私の質問は、リフレクション/マップへの変換以外に、この問題に取り組むための他の方法論は何ですか?
javax.script.*
この道をさらに進む前に、Rhinoから何かを共食いする方法を誰かが知っているかどうか、またはおそらくこの概念の実装をよく考えているかどうかを知りたいと思います。あるいは、私が考えていなかったまったく異なるアプローチかもしれません。
編集:はい、私はリフレクションに精通しています(とにかく、Introspectorが内部で使用しているものだと思います)。他によく考えられた解決策があるかどうか、私はただ興味がありました。
編集2:最も一般的な回答には、1)直接またはヘルパークラスを介したリフレクション、および/または2)目的のクラスメンバーを実装するインターフェイスへのマッピングが含まれるようです。Groovyの活用についてのコメントには本当に興味があります。Groovyには真のダックタイピングがあり、JVM言語であるため、Groovyで単純なヘルパーを作成し、Javaから呼び出す方法はありますか?これは本当にクールで、おそらくより柔軟で、パフォーマンスが向上します。
回答:マイクの回答は、最も近い完全な概念であるため、最高のものとしてマークしました。私はおそらくこの特定のケースではそのルートに行きませんが、それは確かに有用なアプローチです。そこにも役立つ情報がたくさんあるので、これを見ている人は必ずここの会話を読んでください。
ありがとう!