2014-03-24 4 views

ответ

3

Это дает ошибку компиляции, потому что компилятор, T может быть все, что расширяет String, поэтому String не будет соответствовать T, если T не действительно String, что он не может и не предполагать. Для этой цели компилятор игнорирует тот факт, что String является классом final.

В этом случае использование параметра типового типа T бесполезно. Это яснее, и оно скомпилируется.

public class Sample { 
    String doSomething() { 
     return "test"; 
    } 
} 
+0

Я не понял, что ... заменить 'String' на' Number' и вернуть 'new Integer (0)'; он по-прежнему дает ту же ошибку. Я знаю, что в этом примере дженерики не очень полезны, это просто упрощённый пример моей проблемы. –

+1

Стоит отметить, что использование 'new String' вырождено. –

+3

@CihatKeser Что делать, если 'T'' Long' или 'Double' или' BigInteger'? Вы не можете вернуть Integer. Возврат должен быть «T» или «null». – rgettman

Смежные вопросы