2013-03-12 58 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() 
    { 
     ... 
    } 
} 

不管這個類繼承什麼類,什麼接口它實現。