2013-01-10 15 views

risposta

8

introduce un tipo di segnaposto, dove T forse praticamente qualsiasi tipo. Questo è in genere utile se T fa parte della firma (o come un parametro o un tipo di ritorno):

<T> void say(T myT) {} 
say<Object>(myObject); 
say<String>(myString); 

<U> U foo(U u) { return u; } 
String s = foo<String>(""); 

E 'raramente utile introdurre un parametro di tipo solo per uso interno, come l'attuale T è spesso più interessante per il consumatore rispetto al metodo.

8

Nel tuo esempio non ha alcun senso. Ma in altri casi, se il tipo di restituzione del metodo è vuoto, <T> può ancora essere utilizzato come tipo di parametri generici previsti. Considerate questo controllo di sicurezza tipo

public static <T> void test(List<T> list1, List<T> list2) { 
    list1.addAll(list2); 
} 

public static void main(String[] args) throws Exception { 
    test(Arrays.asList(1, 1), Arrays.asList("1", "1")); 
} 

, javac dà un errore, prova() si aspetta Elenchi dello stesso tipo.

altro esempio java.util.Collections.fill

public static <T> void fill(List<? super T> list, T obj) { 
    .... 
}  

tipo di controllo di sicurezza di nuovo.