5

让我说有一个抽象类,它看起来像

abstract class Parent<V> {

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

在以下子类中

class Child extends Parent<XXX> {

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

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

哪一个更可取?newInstance1还是newInstancw2

4

2 回答 2

4

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

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

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

会更合适。

于 2013-03-12T05:58:21.697 回答
1

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

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

不管这个类扩展了什么类以及它实现了什么接口。

于 2013-03-12T06:07:55.993 回答