我想創建一個生成器模式,使用泛型提供一些方法的類型檢查。目前,我有以下工作:通用類型從枚舉&生成器模式
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();
使用代碼:
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
}
所以其輸入爲setDefaultValue
方法的類型是什麼傳入start
方法定義,只是因爲我想要的。
但現在我想擴展什麼正在傳遞到start()
包含多一點的信息。本質上,我想爲我創建的參數傳遞一個「類型」。有時,這些參數會像「電子郵件」,「網址」等的默認值將仍然是一個已知類型(字符串在那些情況下),所以我想有這樣的:
ParameterBuilder.start(EMAIL).setName("email").setDefaultValue("[email protected]").build();
ParameterBuilder.start(URL).setName("website").setDefaultValue("http://www.somewhere.com").build();
目前,EMAIL & URL是枚舉,其中包含默認值的類。但是如果我沿着這條路線走下去,我將如何實例化參數生成器?
public static <T2> ParameterBuilder<T2> start(ParameterType paramType) {
Class<T2> type = paramType.getTypeClass();
// How do I instantiate my ParameterBuilder with the right type?
}
如果不能使用枚舉(我可以看到既然如此)來完成,沒有任何人有不同的解決方案有何建議?
你能告訴究竟是什麼'EMAIL','URL'。他們是兩個不同的枚舉?他們是兩個枚舉的實例嗎?他們是什麼? –
在我的情況下,我有一個ParameterType回顯類似於:'public enum ParameterType {STRING(String.class,「String」),INTEGER(Integer.class,「Integer」),MULTILINE(String.class,「Multine Text」 ),HTML(String.class,「HTML」),DATE(Date.class,「Date」),BOOLEAN(Boolean.class,「Boolean」); //遵循的方法' –