У меня есть простой проект java, который я использую для сборки. Она имеет следующие два класса:Перекомпиляция с кодом муравьев вызывает сбой во время выполнения?
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");
}
}
Который работает отлично:
Теперь, если я изменю 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>
Это звучит довольно сомнительно. Это означало бы, что стратегия перекомпиляции муравьев почти бесполезна, и вы можете просто удалить все классы каждый раз, когда собираетесь собирать. Тем не менее, не следует ли «A» работать с новым «B», поскольку аргумент совместим в любом случае? – Dog
@Dog, я могу ошибаться, но попытался ли вы удалить файлы классов и запустить сборку муравьев? – Lucas
@Dog, вот еще одна ссылка: http://stackoverflow.com/a/2590705/516433 – Lucas