Antを使用して構築している単純なJavaプロジェクトがあります。次の 2 つのクラスがあります。
A.java:
public class A {
public static void main(String[] args) {
Integer i = 0;
B.f(i);
}
}
B.java:
public class B {
public static void f(int i) {
System.out.println("hello");
}
}
これはうまくいきます:
$ ant compile
[...]
$ java -cp bin A
hello
ここで、int
パラメータを次のように変更B.f
するとObject
:
public class B {
public static void f(Object i) {
System.out.println("hello");
}
}
...コードは正常に再コンパイルされます...
$ ant compile
[...]
$ java -cp bin A
Exception in thread "main" java.lang.NoSuchMethodError: B.f(I)V
at A.main(Unknown Source)
...しかし、実行時にクラッシュします。なんで?
コンパイル前のフォルダ構造:
bin
build.xml
src
├── A.java
└── B.java
build.xml:
<project>
<target name="compile">
<javac srcdir="src" destdir="bin"/>
</target>
</project>