【发布时间】:2017-07-27 23:39:12
【问题描述】:
我想创建一个参数化(通用)类MyType<T> 及其构建器。 builder 将有一些忽略类型 T 的方法和一些使用该类型的方法。但似乎使用这种模式我必须重复 T 声明:
how to omit this declaration?
|
V
MyType<String> myType = Builder.<String>of()
.method1(argument_can_be_of_any_type)
.method2(argument_must_be_of_type_T = String)
.build();
是否可以使用一些 java 语法技巧或其他设计模式来省略第二种类型声明并使 API 更加用户友好?比如:
List<String> aList = Lists.emptyList();
或
List<String> aList = new LinkedList<>();
我不想在构建器中强制执行任何方法顺序
【问题讨论】:
-
请发帖
Builder班级。 -
method2 的参数是否必须是字符串类型? (换句话说,我们可以从该参数推断出 build() 的返回值的最终类型吗?或者它可以是任何东西吗?
-
@ChrisRaser 是的,method2 的参数必须是字符串。这就是我想要实现的 - 从该参数推断类型
T而无需显式声明 -
@piotrek,我在下面发布了一个修改后的解决方案(其他人的有用建议)。
标签: java generics design-patterns type-inference builder