2015-10-29 25 views
8

Ho bisogno di dichiarare un'istanza di Map.class, ma la mappa è tipizzato ... quindi ho bisogno di qualcosa di simile:Come dichiarare una classe tipizzata in Java?

Class <Map<String, String>> clazz = Map.class; 

Questa riga causa un errore di compilazione. Qual è il modo pulito per esprimere questo?

+2

Potresti fornire alcune informazioni su cosa stai cercando di ottenere? – alexk

+0

@alexk, ho una situazione in cui sto invocando un metodo che riceve un 'Classe ' come parametro. Nel mio caso, sarebbe la 'Classe '. Se scrivo 'Map.class', funziona bene, ma non mi piace l'avvertimento ... Sto cercando un modo per eliminare l'avviso (non usando' @ SupressWarnings'). – Martin

risposta

4

Puoi farlo con i cast.

Class<Map<String, String>> clazz = (Class<Map<String, String>>) (Object) Map.class; 

Questo genera un avviso ma viene compilato.

Il problema è che a causa della cancellazione del tipo, l'oggetto risultante in fase di runtime non è diverso da Map.class (non conosce il tipo).

Se è necessario un oggetto che rappresenta veramente Map<String, String>, è possibile esaminare utilizzando java.lang.reflect.Type o Guava TypeToken.

+0

Ottima risposta, signore. Ho imparato qualcosa di nuovo. – javatutorial

+0

Non è un problema. Sono contento di poterti aiutare. –

+1

Questo funziona fino ad ora, ma non mi piace fare il casting ... Vorrei una soluzione che non implicasse il casting, o meglio, che non genera avvisi (@SupressWarnings non è una soluzione, solo un soluzione alternativa) ... – Martin

0
Map<String, String> clazz = new HashMap<String, String>() 

Ricordate che Map è un'interfaccia, non istanziabili direttamente, ma solo attraverso una classe attuazione, come HashMap o TreeMap

+1

'class' è una parola riservata in Java, non è possibile utilizzarla come nome variabile – JonK

+3

L'OP necessita di una classe, non di una mappa. –

+0

@JonK ok, non mi importava il nome della variabile. grazie. – morels

2
import java.util.*; 

public class Test{ 
    public static void main(String [] args){ 
    Class <Map> clazz = Map.class; 
    System.out.println(clazz); 
    } 
} 

stamperà

interfaccia java.util.Map

Problemi correlati