我对java和设计模式比较陌生。我正在尝试为我的应用程序实现生成器模式。我有一个 interface
它有一个方法 build
这个 build
方法将类作为参数并返回相同的值。
public interface TestInterface {
public TestInterface withTest(int start);
public <T> T build();
}
到目前为止,我已经实现了这一点 interface
在单个类中重写 GenerateBuilder
上课,效果很好
public class GenerateNumbers {
private String start;
private GenerateGSRN(GenerateBuilder builder) {
this.start = builder.start;
}
public static class GenerateBuilder implements TestInterface {
private String start;
@Override
public TestInterface withGcp(String start) {
this.start = start;
return this;
}
@Override
public GenerateNumbers build() {
return new GenerateNumbers(this);
}
}
}
但我想移动 GenerateBuilder
类,该类将方法重写为自己的独立类,以便其他任何类都可以使用它(使其成为公共类,这样我就不必再编写此代码)。
但是我们可以看到
GenerateBuilder Build
功能与 GenerateNumbers
因此我无法移动它。我想换衣服 Build
中的方法 Interface
以及在 overriding
以便它将类的示例返回给调用类。
例如:如果 GenerateNumbers
正在调用生成方法 build
方法应返回 GenerateNumbers
. 如果 GenerateNumbersRandom
他在打电话吗 build
方法应返回的示例 GenerateNumbersRandom
.
我尝试了几件事,但都没有成功:
接口中: public <T> T build(Class clazz);
在覆盖中:
@Override
public <T> T build(Class clazz) {
return clazz.newInstance();
}
我希望我能正确地解释这个问题。有人能告诉我怎么做吗。
1条答案
按热度按时间bybem2ql1#
据我所知,你可以:
声明接口具有泛型类型(
Builder
)声明要由实现接口的类生成的类型(
NumberGenerator
)将生成器声明为接口的实现,接口的泛型类型为它将生成的类(
NumberGeneratorBuilder implements Builder<NumberGenerator>
)在
Builder
接口,在运行时访问泛型的实际类型以示例化此类型的新示例。举个例子,这会给出如下结果: