Il mio obiettivo è sviluppare una classe che possa generare un oggetto di una classe specificata.Come passare una classe parametrizzata come argomento
public class GetMe<T> {
public T get() {
Object obj = generateObject();
return (T) obj;
}
}
Ora, so che questo non è possibile a causa della cancellazione. Quindi, possiamo passare in un'istanza di classe e usarlo per trasmettere.
public class GetMe<T> {
public GetMe<T>(Class<T> clazz) {
this.clazz = clazz;
}
public T get() {
Object obj = generateObject();
return clazz.cast(obj);
}
}
Questo funziona benissimo! Finché la classe non è parametrizzata. Se lo è, allora ho un problema.
Non sono autorizzato a utilizzare List<String>.class
. Se passo in un ParameterizedType (che di per sé è difficile da generare), non esiste un metodo cast
da utilizzare.
Esiste un modo per uscire da questo pantano?
C'è un modo per conservare i generici in fase di esecuzione, ma cos'è 'generateObject' e perché non può restituire un oggetto di tipo' T'? – ide
guarda questo esempio, potrebbe aiutare: http://serdom.eu/ser/2007/03/25/java-generics-standardment-objects-of-type-parameter-without-using-class-literal –
Diciamo ' generateObject() 'è un deserializzatore di terze parti. So che è di tipo T, perché l'ho serializzato in precedenza, ma il metodo restituisce comunque Object. Potrebbe anche essere il risultato di un metodo.invoke, che restituisce solo oggetto. –