2013-03-12 59 views
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) { 
     // ... 
    } 
} 

哪一个最好? newInstance1newInstancw2

+0

E是指什么?它是一些具体的现有类或泛型类型变量吗? – 2013-03-12 06:18:28

+0

亲爱的@EyalSchneider我更新了源代码。抱歉。 – 2013-03-12 06:46:11

回答

4

它实际上取决于您使用newInstance()的情况。在最一般的情况:

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

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

会更合适。

1

通常情况下,工厂方法定义里面的一些类返回这个特定的类的实例,所以它应该是:

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

不管这个类继承什么类,什么接口它实现。