2009-08-30 16 views
11

che sto cercando di fare qualcosa di simile in Java:C'è un modo per trovare il tipo di un parametro template (generico) in Java?

public static <T> T foo() { 
    return (T) bar(T); 
} 

public static Object bar(Class<?> klaz) { 
    return klaz.newInstance(); 
} 

Ma il codice non compilato poiché non posso sostituire T per un Classe <>?.
Con una classe concreta, mi può chiamare bar come:

bar(ConcreteClass.class); 

Ma lo stesso non funziona per T. vale a dire non c'è alcuna cosa come T.class

In C#, typeof lavori per entrambi i tipi di calcestruzzo e di modello. Quindi, la chiamata al bar sarebbe stata:

bar(typeof(T)); 

Ma non sono stato in grado di trovare nulla di simile in Java.

Mi manca qualcosa o Java non ha un modo per ottenere il tipo di parametro di un modello? E se Java non ha la funzione, ci sono soluzioni alternative?

risposta

14

Non c'è modo di ottenere il tipo. I generici di Java usano la cancellazione dei tipi, quindi nemmeno java non sa cosa sia T in fase di runtime.

Come per soluzioni alternative: è possibile definire foo per prendere un parametro di tipo Class<T> e quindi utilizzarlo.

Problemi correlati