gpt4 book ai didi

java - 枚举的泛型和 builder 模式

转载 作者:搜寻专家 更新时间:2023-10-31 20:28:56 27 4
gpt4 key购买 nike

我正在尝试创建一个构建器模式,该模式使用泛型为某些方法提供类型检查。目前我有以下工作:

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”等。默认值仍然是已知类型(在这种情况下是 String),所以我想要这样的东西:

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?
}

如果不能使用枚举来完成(我可以看到这种情况),有人对不同的解决方案有什么建议吗?

最佳答案

我认为每个类类型都需要一个枚举(我不明白如何让一个枚举涵盖多种类型并保持工作正常)。在那种情况下,一个通用的通用接口(interface)可以做你想做的事。然后,如果有帮助,您可以创建某种工厂来提供枚举常量。

编译:

static interface ParameterType<T> {}

static enum ParameterTypeEnum implements ParameterType<String> { EMAIL; }

public static void main(String[] args) {
ParameterBuilder
.start(ParameterTypeEnum.EMAIL)
.setName("email")
.setDefaultValue("foo@bar.com")
.build();
}

public static class ParameterBuilder<T> {

private String name;
private T defaultValue;

public static <T2> ParameterBuilder<T2> start(ParameterType<T2> paramType) {
return new ParameterBuilder<T2>();
}

ParameterBuilder<T> setName(String name) {
this.name = name;
return this;
}

ParameterBuilder<T> setDefaultValue(T defaultValue) {
this.defaultValue = defaultValue;
return this;
}

void build() {}
}

关于java - 枚举的泛型和 builder 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18101013/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com