从Java Factory Pattern返回类型

A G*_*ani 0 java javadoc factory-pattern

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

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

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

我有一个界面

public interface myInterface
{
     public Object doA();
     public Object doB();
}
Run Code Online (Sandbox Code Playgroud)

具体课程如下

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

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

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

}
Run Code Online (Sandbox Code Playgroud)

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

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

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

}
Run Code Online (Sandbox Code Playgroud)

我的工厂课程如下

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;
     }
}
Run Code Online (Sandbox Code Playgroud)

我的测试跑步者课程如下

String result = factory.actionProducer("a").doA();
Run Code Online (Sandbox Code Playgroud)

use*_*ica 6

您不必显式测试工厂方法的返回值的动态类型.静态类型应该告诉您需要知道的所有内容.这意味着返回类型应该是特定的,以告诉您可以对该对象做什么.例如,制作不同实现的映射的工厂方法应返回Map:

public interface MapFactory {
    public Map makeMap();
    ...
}
Run Code Online (Sandbox Code Playgroud)

无论Map是a HashMap还是TreeMapor ConcurrentSkipListMap,您都可以使用这些Map方法与它进行交互.如果事实证明你需要调用ceilingKey,这不是一种Map方法,你就会遇到设计问题.

在你的情况下,你的工厂方法是没有意义的,因为没有更多的特定类型要返回Object,并且你无法使用超出API的返回值Object.无论对象如何实现,更合理的工厂都会返回可以以相同方式交互的对象.

  • @AGilani:不知道.这听起来像是[XY问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem); 最好的方法可能是从不同角度处理问题而不要求你这样做.您可以尝试询问有关您的设计的另一个StackOverflow问题. (2认同)