2013-10-23 170 views
1

在一個方法返回一個泛型的情況下,將泛型類聲明爲一個返回類型與僅在類級別聲明相比有什麼好處?Java泛型類定義爲返回類型還是在類級別?

//case #1 
    public interface Reaper<T> { 
     <S extends Foo> S save(S entity); 
     <S extends Foo> S saveWithOptions(S entity, Object[] params); 
    } 

//case #2 
    public interface Reaper<T, S extends Foo> { 
     S save(S entity); 
     S saveWithOptions(S entity, Object[] params); 
    } 

在情況#2,我不必重複<S extends Foo>每個因爲它在接口的聲明返回S,但是當涉及到使用我不得不將其定義爲Reaper<MyType, MyFooSubType>方法。除此之外,是否有任何重大差異和/或利益?

回答

6

如果您在類級聲明它,則不能在同一個類實例上調用具有不同類型參數的函數。
換句話說,類型成爲實例的屬性,而不是每個函數調用的屬性。

1

用例有點不同。在類級別上的使用將保證你對所有方法的一致性(類型限制)。