这可能是一个非常基本的问题,有一个非常明显的答案,但我很难弄清楚这一点。
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();
...
}
无论Map
是HashMap
还是TreeMap
还是ConcurrentSkipListMap
,您都可以使用Map
与其交互的方法。如果您需要调用 ceilingKey
(它不是 Map
方法),则说明存在设计问题。
在您的情况下,您的工厂方法没有任何意义,因为没有比 Object
返回更具体的类型,并且除了 Object 的 API 之外,您无法对返回值执行任何操作
。更合理的工厂会返回可以以相同方式交互的对象,而不管对象是如何实现的。
关于java - Java 工厂模式的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21198215/