Это не компилируется.
Возможно, вы видите то, чего больше не существует.
Например, предположим, что метод addData
используется для получения String a , OtherClass b
Позже, OtherClass был заменен на String, и в результате произошел автоматический ре-факторинг, что-то вроде:
// BEFORE
addData( "abc", new AbcValidator("abc"){
public boolan isDataCorrect(){
return true;
}
});
addData( String a, AbcValidator b ) {
}
После рефакторинга кто-то (возможно, плохой инструмент рефакторинга) подумал, что можно использовать необработанную строку.
// AFTER:
addData( "abc", "abc"{
public boolan isDataCorrect(){
return true;
}
});
addData( String a, AbcValidator b ) {
}
Когда вы его компилируете и запускаете, он даже не компилируется, но поскольку он был запущен раньше, скрипт запуска берет предыдущую версию (ту, которая использует AbcValidator) и выглядит так, как будто она работает, но это не так.
Почти невозможно угадать, что происходит на вашем столе, но не делайте ошибок, это не работает.
Чтобы проверить это, сделайте следующее:
A) создайте новый каталог и java "Hey.java" со следующим содержимым:
class Hey{
public static void main( String [] args ) {
addData("abc", "abc" {
public boolean isDataCorrect() {
return true;
}
});
}
public void addData( String a, String b ){}
}
B) Скомпилируйте этот файл, желательно из командной строки: javac Hey.java
Вы увидите, что это не работает.