gpt4 book ai didi

java - Java 工厂模式的返回类型

转载 作者:行者123 更新时间:2023-12-01 07:07:19 25 4
gpt4 key购买 nike

这可能是一个非常基本的问题,有一个非常明显的答案,但我很难弄清楚这一点。

java工厂模式中涉及到的如何知道类的方法的返回类型。例如,查看下面的代码...方法调用的返回类型是什么以及如何正确转换它...以及如何为类编写 javadoc。

我正在尝试编写一个库,然后用户可以将其插入到他们的项目中...

我有一个界面

public interface myInterface
{
public Object doA();
public Object doB();
}

具体类如下

public class concerete1 implements myInterface
{
public concerete1() {
}

@override
public Object doA()
{ return new String("Hello"); }

@override
public Object doB()
{ return "hello".getBytes(); }

}

public class concerete1 implements myInterface
{
public concerete2() {
}

@override
public Object doA()
{ return "hello".getBytes(); }

@override
public Object doB()
{ return new String("Hello"); }

}

我的工厂类如下

public class factory
{
private myInterface mi;

public myInterface actionProducer(String choice)
{
switch(choice)
{
case "a":
mi = new concerete1();
break;
case "b":
mi = new concerete2();
break;
}
return mi;
}
}

我的测试运行程序类如下

String result = factory.actionProducer("a").doA();

最佳答案

您不必显式测试工厂方法返回值的动态类型。静态类型应该告诉您需要知道的所有信息。这意味着返回类型应该尽可能具体,以告诉您可以对该对象执行哪些操作。例如,制作不同实现的 map 的工厂方法应返回 Map:

public interface MapFactory {
public Map makeMap();
...
}

无论MapHashMap还是TreeMap还是ConcurrentSkipListMap,您都可以使用Map 与其交互的方法。如果您需要调用 ceilingKey(它不是 Map 方法),则说明存在设计问题。

在您的情况下,您的工厂方法没有任何意义,因为没有比 Object 返回更具体的类型,并且除了 Object 的 API 之外,您无法对返回值执行任何操作。更合理的工厂会返回可以以相同方式交互的对象,而不管对象是如何实现的。

关于java - Java 工厂模式的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21198215/

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