Questa potrebbe essere una domanda stupida, ma ho appena visto una domanda che chiede how to create a Type variable for a generic type. Il consenso sembrava essere che dovresti avere un metodo fittizio che restituisce quel tipo, e quindi usare reflection per ottenerlo (in questo caso voleva Map<String, String>
). Qualcosa di simile a questo:Creazione di oggetto tipo parametrizzato usando la classe anonima
public Map<String, String> dummy() { throw new Error(); }
Type mapStringString = Class.forName("ThisClass").getMethod("dummy").getGenericReturnType();
La mia domanda è, non avendo riflessione utilizzato più di tanto, non poteva semplicemente fare qualcosa di simile:
Type mapStringString = new ParameterizedType() {
public Type getRawType() {
return Map.class;
}
public Type getOwnerType() {
return null;
}
public Type[] getActualTypeArguments() {
return new Type[] { String.class, String.class };
}
};
Sarebbe questo lavoro? Se no, perché no? E quali sono alcuni dei pericoli/problemi se lo fa (oltre ad essere in grado di restituire un certo tipo, come Integer<String>
che non è ovviamente possibile.
Sto provando a fare ciò che la soluzione proposta consente: ottenere un tipo parametrizzato da un raw Tipo ed elenco dei parametri di tipo forniti al momento della compilazione. Hai trovato un altro modo per farlo? – user48956