SO について多くの同様の質問がありましたが、実行時にメソッド本体を置き換えることができるかどうか、およびその変更されたメソッドをそのメソッドへの既存の呼び出しによって実行できるかどうかを把握しようとしています。
同様の質問に対する多くの回答を読んだ後、実行時にユーザー定義のクラスを置き換えることができることを知りました。次に、変更されたクラスをロードし (たとえば、変更されたクラスに変更されたメソッドがある)、そのクラスのインスタンスを作成し、変更されたメソッドを呼び出すことができます。この質問に対する受け入れられた回答は、概念を理解するのに非常に役立ちました。
基本的に、その回答で使用されている例は、 を変更すると、クラスの新しいインスタンスを作成し、そのインスタンスを介して hello を呼び出すため、クラスのメソッドTest1.hello()
によって選択されることを説明しています。main
Test
Test1
Class cls = new TestClassLoader().loadClass("test.Test1");
Object obj = cls.newInstance();
cls.getMethod("hello").invoke(obj);
しかしhello()
、コード ベース (例: ) に多数の既存の呼び出しが存在する場合があり、クラスを動的にTest2.java
ロードした後、既存のすべての呼び出しで、古いメソッドではなく、変更されたメソッドが実行されるようにする必要があります。 .Test1
Test2
それがまったく可能かどうか、または何かが欠けているかどうか疑問に思っていました。
よろしくお願いします。