Почему эта часть кода дает несовместимую ошибку типа?Использование суперкласса в качестве параметра типа в общем подтипе
public class Sample<T extends Number> {
T doSomething() {
return new Integer(0);
}
}
Почему эта часть кода дает несовместимую ошибку типа?Использование суперкласса в качестве параметра типа в общем подтипе
public class Sample<T extends Number> {
T doSomething() {
return new Integer(0);
}
}
Это дает ошибку компиляции, потому что компилятор, T
может быть все, что расширяет String
, поэтому String
не будет соответствовать T
, если T
не действительно String
, что он не может и не предполагать. Для этой цели компилятор игнорирует тот факт, что String
является классом final
.
В этом случае использование параметра типового типа T
бесполезно. Это яснее, и оно скомпилируется.
public class Sample {
String doSomething() {
return "test";
}
}
Я не понял, что ... заменить 'String' на' Number' и вернуть 'new Integer (0)'; он по-прежнему дает ту же ошибку. Я знаю, что в этом примере дженерики не очень полезны, это просто упрощённый пример моей проблемы. –
Стоит отметить, что использование 'new String' вырождено. –
@CihatKeser Что делать, если 'T'' Long' или 'Double' или' BigInteger'? Вы не можете вернуть Integer. Возврат должен быть «T» или «null». – rgettman