Сейчас у меня есть что-то вроде этого:
Код: Выделить всё
public class SingularNode {
private T value;
@SuppressWarnings("unchecked")
@Override
public boolean equals(Object other){
if(other instanceof SingularNode){
if(((SingularNode)other).value.equals(value)){
return true;
}
}
return false;
}
}
Другое: когда я делаю if(other instanceof SingularNode), я на самом деле проверяю не совсем то, что нужно. На самом деле я хочу проверить тип T, а не тип ?. Всякий раз, когда я пытаюсь превратить ? в T, я получаю ошибку типа:
Невозможно выполнить проверку экземпляра параметризованного типа SingularNode. Вместо этого используйте форму SingularNode, поскольку дальнейшая информация об общем типе будет удалена во время выполнения.
Как это обойти? Есть ли какой-нибудь способ сделать T.class.isInstance(other); ?
Я полагаю, есть одно действительно уродливое хакерское решение, подобное этому:
Код: Выделить всё
@SuppressWarnings("unchecked")
public boolean isEqualTo(Class c, Object obj){
if(c.isInstance(obj) && c.isInstance(this)){
if(((SingularNode)obj).value.equals(value)){
return true;
}
}
return false;
}
Кто-нибудь, кто разбирается в дженериках, объясните это? Как вы можете ясно видеть, я не очень хорошо разбираюсь в Java, поэтому, пожалуйста, объясните немного подробнее!
Подробнее здесь: https://stackoverflow.com/questions/163 ... instanceof
Мобильная версия