在方法返回泛型的情况下,与仅在类级别声明相比,将泛型类声明为返回类型是否有任何好处?
//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>
。除此之外,是否有任何重大差异和/或好处?
答案 0 :(得分:6)
如果在类级别声明它,则无法在同一个类实例上调用具有不同类型参数的函数。
换句话说,类型成为实例的属性,而不是每个函数调用的属性。
答案 1 :(得分:1)
用例有点不同。类级别的用法将保证所有方法的一致性(类型限制)。