2011-01-25 49 views
1
public interface Factory<T> 
{ 
    T create(); 
} 

public interface Factory<T,P> 
{ 
    T create(P... data); 
} 

有沒有一種方法來定義這些接口,所以我可以使用名稱Factory這兩種類型,或者我必須使用FactoryWithParamJava - 使用泛型的多重簽名?

回答

4

是否有任何理由不能將兩個接口合併爲一個?

public interface Factory<T,P> 
{ 
    T create(); 
    T create(P... data); 
} 

但是,如果你不能那麼你就不可能有兩個不同的接口在同一個包中具有相同的名稱。你可以把它們放在不同的軟件包中,但我強烈建議不要這樣做,它會讓任何維護代碼的人感到困惑。

0

你可以,但前提是你將這兩個接口放在兩個不同的包中。

1

不,因爲泛型是如何工作的。爲了保持向後兼容性,Generified類的編譯字節碼沒有區別 - 它們只強制編譯時檢查!這意味着你將有兩個同名的類,這是不允許的(在同一個包中)。