通用工厂方法惯例

时间:2013-03-12 05:55:45

标签: java generics

让我说有一个类似于

的抽象类
abstract class Parent<V> {

    protected static <T extends Parent<V>, V> T newInstance(
        final Class<T> type, final V value) {
        // ...
    }
}

在以下Child类

class Child extends Parent<XXX> {

    public static Child newInstance1(final XXX value) {
        // ...
    }

    public static Parent<XXX> newInstance2(final XXX value) {
        // ...
    }
}

哪一个更好? newInstance1newInstancw2

2 个答案:

答案 0 :(得分:4)

这实际上取决于您使用newInstance()的情况。在大多数情况下:

由于Child正在实施newInstance(),据我说

protected static Child newInstance() 
{
    // ...
}

会更合适。

答案 1 :(得分:1)

通常,在某个类中定义的工厂方法会返回此特定类的实例,因此它应该是:

public class Foo ...
{
    public static Foo newInstance ()
    {
        ...
    }
}

无论此类扩展了什么类以及它实现了什么接口。