Позволить компилятору выполнить работу, перегружая методы, не работаетJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Позволить компилятору выполнить работу, перегружая методы, не работает

Сообщение Anonymous »

Предположим, у меня есть следующая структура класса

Код: Выделить всё

public interface Searchable{

public boolean matches(String text);

}

public abstract class AbstractSearchable implements Searchable{

private String name;

public boolean matches(String text){
return null != name && name.startswith(text);
}
}
Большинство объектов моего домена наследуют от AbstractSearchable, но есть несколько, которые доступны только для поиска и реализуют собственное поведение.

Тогда у меня есть следующий тест:

Код: Выделить всё

public class SearchableTest{
public void testSearchable(){
//get an instance which is either Searchable or AbstractSearchable
T item = getSomeTestItem();
checkItem(item);
}

public void checkItem(Searchable searchable){
throw new UnsupportedOperationException("Please implement your own check for Searchable and Override checkItem(Searchable)!");
}

public void checkItem(AbstractSearchable item){
//here i can Implement the Test using the name from AbstractSearchable
//... implementation
}
}
Я думаю, что если возврат getSomeTestItem является AbstractSearchable, компилятор обнаружит это и передаст его «правильному» методу checkItem . Я где-то читал (я действительно забыл где), что компилятор Java всегда находит «наилучшее соответствие» (это означает, что TestItem на самом деле «более» AbstractSearchable, чем Searchable). К сожалению, это не так, и все AbstractSearchables передаются «неправильному» методу checkItem`.

Мне известно об этом быстром исправлении

Код: Выделить всё

public void checkItem(Searchable searchable){
if (searchable instanceof AbstractSearchable){
checkItem((AbstractSearchable)searchable);
} else {
throw new UnsupportedOperationException("Please implement your own check for Searchable and Override checkItem(Searchable)!");
}
}
но я действительно ненавижу проверки экземпляров. Могу ли я что-нибудь сделать, чтобы это заработало?

Подробнее здесь: https://stackoverflow.com/questions/229 ... oesnt-work
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»