Fondamentalmente, si sta dicendo che esiste un solo tipo possibile per T
e che è lo stesso String
. Quindi in pratica la tua classe generica Car
è generica solo nel nome. Si può anche solo sostituire tutte le istanze di T
nella classe con String
.
Forse intendevi public class Car<T extends CharSequence>
...
Il costrutto è consentito perché la classe è significativo, e forse anche utile. L'avvertimento è dato perché (secondo il parere degli autori del compilatore) probabilmente hai fatto un errore. Il ragionamento è lo stesso che per l'avvertimento che alcuni compilatori vi darà la seguente:
String NULL = null;
System.err.println(NULL.toString());
Questo è significativo, ma è un errore ... a meno che non si ha intenzione ad un'eccezione.
Mi vengono in mente due scenari in cui public class Car<T extends SomeFinalClass>
non è un errore:
- Il caso in cui
SomeFinalClass
in origine non era final
.
- Il caso in cui il codice per
Car
viene generato automaticamente e sarebbe scomodo generare codice del caso speciale per le classi final
.
fonte
2012-09-18 10:28:30
Il messaggio di avviso dice tutto. Come puoi trovare una classe che estenda la stringa finale? Quindi 'T' sarà sicuramente un' String' – Raffaele
@ Thor84no vedere la domanda modificata e la risposta [axtavt] (http://stackoverflow.com/a/12475147/315306) – Raffaele