2017-04-08 9 views
1

私の質問は、プロパティやメソッドを既に "クラスローディング"クラスに挿入することですか?私はすでにJavaで、プロパティを動的に追加するのは簡単ではないことに気付きました。皆さんはMap(add property for a object dynamicly)を使うべきだと皆に言います。実行時にクラス内のフィールドを変更する - Java

ランタイム中にクラスを変更するには、よりクリーンな方法がありますか?私はASMについて何かを読んでいますが、ASMが使用する訪問者パターンが最適な方法であるかどうかはわかりません。場合ASM

は、この問題を処理するための最良のものであるASMウェブサイト上で提供される一つの横にある任意のドキュメントがあります(http://download.forge.objectweb.org/asm/asm4-guide.pdf

+0

これにはどのようなケースがありますか? –

+0

私はSpring&Coにかなり感銘を受けました。なぜなら、java.reflectionとそのような偉大なフレームワークの背後にある可能性のあるプロセスについてもっと知るために、何か同じものをコーディングしようとしない理由が考えられました。 ショート:私は新しいものを学びたい –

+1

ZeroTurnaround(誰がJRebelを作った人)の話から覚えている限り、フィールドとメソッドを既存のクラスに追加するのは本当に難しく、実際にクラス全体を新しいクラスそのクラスへのすべてのリンクを更新します。話をオンラインで見つけようとすると、もし私がそうすれば更新されます。 –

答えて

2

クラスはJVMによってロードされると、それはすることはできませんそれを変更してください。

あなたの最善の策は、クラスを変更して、別のクラスローダーで新しいコピーをロードすることです。 2つのバージョンのクラス(ランタイムタイプが異なる!)になります。クラスの最初のバージョンのインスタンスには、新しいフィールドやメソッドなどはありません。

私のアドバイス...しないでください。実際にここでやろうとしていることを実装する別の方法を考えてみましょう。または、オンザフライでクラスをアプリケーションに変更することが基本である場合は、より動的な言語の使用を検討してください。

+0

あなたの答えをありがとう –

関連する問題