2013-10-23 106 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

用例有点不同。在类级别上的使用将保证你对所有方法的一致性(类型限制)。