Javaリフレクションで取得したクラスをサブクラス化することは可能ですか?私はすでにロードされているクラスのメソッドの実装を変更しようとしています。私は定期的な反射方法でそれを行う方法がないことを知っています。取得したクラスをJavaリフレクションでサブクラス化することは可能ですか?
final Class cls = classLoader.loadClass(className);
Object newRemoteInstance = new cls() {
@Override
public void saySth() {
System.out.println("changed");
}
}
代わりの
cls.newInstance();
とまったく同じ実装を取得した後に、既にロードされたクラスのフィールドをコピーする:それはのような、検索されたクラスをサブクラス化することにより可能である場合しかし、私は思っていました新しく作成されたインスタンスと、すでにロードされているインスタンスの代わりにこの新しいインスタンスを使用します。変更するクラスは使用できないので、リフレクションを使用する必要があります。
ありがとうございます。
あなたの最後の例は、まさに私があなたに感謝する必要があります! AndroidはDalvikのバイトコードを実行するのに対し、CGlibはJavaのバイトコードを生成するため、残念ながらAndroid(私のプロジェクトのベース)は動作しません。同等の機能を提供するAndroidの代替手段を知っていますか?編集:私は実際に見つけたhttp:// bytebuddy。net /の最新バージョンでAndroidをサポートしていると主張しているので、 – Phoebus