Sto provando a creare un modello di generatore che utilizza i generici per fornire il controllo dei tipi su alcuni metodi. Attualmente ho il seguente lavoro:Tipo generico da Enum e il modello di generatore
ParameterBuilder.start(String.class).setName("foo").setDefaultValue("Hello").build();
ParameterBuilder.start(Integer.class).setName(bar).setDefaultValue(42).build();
ParameterBuilder.start(Boolean.class).setName(bar).setDefaultValue(false).build();
Utilizzando il codice:
public class ParameterBuilder<T> {
private String name;
private T defaultValue;
public static <T2> ParameterBuilder<T2> start(Class<T2> type) {
return new ParameterBuilder<T2>();
}
// Other methods excluded for example
}
Così il tipo di input per il metodo setDefaultValue
è definito da ciò che è passato nel metodo start
, proprio come voglio.
Ma ora voglio estendere ciò che viene passato in start()
per contenere un po 'più di informazioni. In sostanza, voglio passare un "tipo" per i parametri che sto creando. A volte questi parametri saranno cose come "e-mail", "url", ecc Il valore predefinito sarà ancora di tipo noto (String in questi casi), quindi mi piacerebbe avere qualcosa di simile:
ParameterBuilder.start(EMAIL).setName("email").setDefaultValue("[email protected]").build();
ParameterBuilder.start(URL).setName("website").setDefaultValue("http://www.somewhere.com").build();
Dove al momento EMAIL & URL sono enumerazioni, contenenti tra le altre cose - la classe del valore predefinito. Ma se percorro questa strada, come posso istanziare il generatore di parametri?
public static <T2> ParameterBuilder<T2> start(ParameterType paramType) {
Class<T2> type = paramType.getTypeClass();
// How do I instantiate my ParameterBuilder with the right type?
}
Se non può essere fatto utilizzando le enumerazioni (che posso vedere è il caso), Qualcuno ha un suggerimento per una soluzione diversa?
si può mostrare che cosa è esattamente 'EMAIL',' URL'. Sono 2 le enumerazioni diverse? Sono esempi di due enumerazioni? Quali sono? –
Nel mio caso, ho avuto un tipoParametro eco qualcosa di simile: 'public enum tipoParametro {string (String.class, "String"), Integer (Integer.class, "Integer"), MULTILINE (String.class, "Multine testo"), HTML (String.class, "HTML"), DATA (Date.class, "Data"), booleani (Boolean.class, "booleano"); // Metodi followed' –