gpt4 book ai didi

java - 在不对返回类型进行类型转换的情况下调用工厂

转载 作者:搜寻专家 更新时间:2023-11-01 02:09:06 26 4
gpt4 key购买 nike

我是第一次尝试制作工厂..如果我没有正确使用模式,请原谅我!

所以这是我的工厂:

public class BuilderFactory { 

public BuilderFactory(){
}

public <T extends Builder> T getBuilderOf(Object clazz){
if(clazz instanceof House){
return (T) new HouseBuilder();
}
return null;
}
}

它将返回一个具有 Builder 接口(interface)的构建器(在本例中为 HouseBuilder)。

build 者:

public interface Builder<T> {

T build();

}

建房者:

public class HouseBuilder implements Builder<House> {

private String street;

public HouseBuilder() {

}
@Override
public House build() {
return new House(street);
}

@Override
public HouseBuilder<House> withStreet(String street) {
this.street = street;
return this;
}

}

这是我称之为的地方:

BuilderFactory builderFactory = new BuilderFactory();

现在可以做到:

builderFactory.getBuilderOf(House.class).build();

因为 build() 是在 Builder 接口(interface)中。但如果我想这样做: builderFactory.getBuilderOf(House.class).withStreet("街道");

我隐含地需要像这样转换构建器:

 (HouseBuilder)builderFactory.getBuilderOf(House.class).withStreet("street")

否则编译器会报错。

我不想转换它,也不想从工厂实例化我的返回值。有没有我不必强制转换结果并且仍然可以使用 .withStreet() 方法的选项? :)

提前致谢。戴维

最佳答案

为什么要为泛型烦恼?

您的工厂明确需要知 Prop 体的 builder (return (T) new HouseBuilder())。

您的客户端明确需要传递正确的类型 (House.class),显然您希望它知道该类型,因为客户端使用特定于具体构建器的方法 (withStreet).

所以只需将工厂方法具体化即可:

public HouseBuilder getHouseBuilder() {
return new HouseBuilder();
}

关于java - 在不对返回类型进行类型转换的情况下调用工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22336205/

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