Básicamente, está diciendo que solo hay un tipo posible para T
y que es String
. Así que, básicamente, su clase genérica Car
es genérica solo por su nombre. También puede simplemente reemplazar todas las instancias de T
en la clase con String
.
mejor usted se refiere public class Car<T extends CharSequence>
... se permite
La construcción porque la clase es significativa, y posiblemente incluso útil. La advertencia se da porque (en opinión de los escritores del compilador) es probable que haya cometido un error. El razonamiento es el mismo que para la advertencia de que algunos compiladores le dará por lo siguiente:
String NULL = null;
System.err.println(NULL.toString());
Esto es significativo, pero es un error ... a menos que la intención a una excepción.
Se me ocurren dos escenarios en los que public class Car<T extends SomeFinalClass>
no es un error:
- El caso en el que
SomeFinalClass
originalmente no era final
.
- El caso donde se genera automáticamente el código para
Car
, y sería incómodo generar código de caso especial para las clases final
.
El mensaje de advertencia lo dice todo. ¿Cómo se puede crear una clase que extienda la cadena 'final'? Entonces 'T' definitivamente será un' String' – Raffaele
@ Thor84no vea la pregunta editada y la respuesta [axtavt] (http://stackoverflow.com/a/12475147/315306) – Raffaele