У меня есть класс, как это:Почему универсальное ограничение T extends Comparable <T> недостаточно, чтобы избежать приведения?
public class AbstractParameter<T extends Comparable> {
....
public void validate(T tempVal, StringBuilder msg) {
if(tempVal.compareTo(new Integer(0)) != 0) {
//do something
}
}
....
}
tempVal будет Integer. Он компилируется и работает нормально. Но если я изменю T расширяет Сопоставимые к T extends Comparable<T>
выше, если заявление генерируется следующая ошибка компиляции:
required: T#1
found: Integer
reason: actual argument Integer cannot be converted to T#1 by method invocation conversion
where T#1,T#2 are type-variables:
T#1 extends Comparable<T#1> declared in class AbstractParameter
T#2 extends Object declared in interface Comparable
Я могу бросить в новый Integer (0) к T удалить ошибку компиляции , Мой вопрос: следует ли использовать public class AbstractParameter<T extends Comparable>
или public class AbstractParameter<T extends Comparable<T>>
?
Я думаю, что public class AbstractParameter<T extends Comparable<T>>
должен быть способ пойти, но что (T)new Integer(0)
литье кажется раздражением. Что-то не так в моем коде?
Как вы знаете (или можешь принудительно), что 'tempVal' будет' Integer' или можно сравнить с 'Integer'? –