プログラムの実行中にクラス定義を変更する方法がわかりません
実行中は変更できませんが、コンパイル後に変更できます。
たとえば、これを試してください:
// In Test.java
public class Test {
public static void main(String[] args){
System.out.println(new Foo());
}
}
// In Foo.java
public class Foo {
}
コンパイル:
javac Foo.java Test.java
走る:
java Test
// Some output like this...
Foo@1d6535bf
Foo.java
次のように変更します。
// No parameterless constructor any more!
public class Foo {
public Foo(int x) {
}
}
再コンパイルするだけ Foo.java
です:
javac Foo.java
テストを再実行します。
Exception in thread "main" java.lang.NoSuchMethodError: Foo: method <init>()V
not found
at Test.main(Test.java:3)
ただし、これは「一般的にスローされるエラー」とは言えません。
そうではないことに注意してくださいInstantiationError
- ただし、次のように変更できますFoo.java
。
public interface Foo {
}
繰り返しますが、再コンパイルするFoo.java
と、今度は次のようになります。
Exception in thread "main" java.lang.InstantiationError: Foo
at Test.main(Test.java:3)