したがって、このプロジェクトでは、実行時にクラスを拡張しようとしています。私が知りたいのは、これは可能ですか? もしそうなら、どうすればいいですか?これらのためのライブラリはありますか?
2603 次
3 に答える
4
CGLibはあなたが探しているライブラリです。クラスを拡張したり、実行時にインターフェースを実装したりするのに非常に強力であるため、Spring や Hibernate などの多くの一般的なフレームワークで使用されています。
次のようなコードでクラス拡張を作成できます
public Object createProxy(Class targetClass) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(targetClass);
enhancer.setCallback(NoOp.INSTANCE);
return enhancer.create();
}
NoOp
ただし、コールバックを、目的のロジックを備えた便利なメソッド インターセプターに置き換える可能性があります。
于 2013-10-07T20:22:32.703 に答える
0
答えは、「クラスを拡張する」の意味によって異なります。Java では、「拡張」とは、最初のクラスを拡張する (サブクラスである) 別のクラスを宣言することを意味します。したがって、特定のクラスのサブクラスを作成したい場合は、これが可能です。サブクラスを表すバイト配列を準備し、それをクラス ローダーに渡すだけです。
フィールドまたはメソッドを既存のクラスに追加する場合、これはこのクラスがロードされているときにのみ可能であり、バイト配列表現を置き換えることによって行われます。クラスがすでにロードされている場合、それを変更することはできません。
于 2013-10-08T08:33:03.110 に答える