我正在尝试创建一个构建器模式,该模式使用泛型来提供对某些方法的类型检查。目前我有以下工作:
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()
以包含更多信息。本质上,我想为我创建的参数传递一个“类型”。有时这些参数会是“email”、“url”等。默认值仍然是已知类型(在这些情况下为字符串),所以我想要这样的东西:
ParameterBuilder.start(EMAIL).setName("email").setDefaultValue("foo@bar.com").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?
}
如果不能使用枚举来完成(我可以看到是这种情况),是否有人对不同的解决方案有建议?