Java泛型类定义为返回类型还是类级别?

时间:2013-10-23 22:01:07

标签: java generics types

在方法返回泛型的情况下,与仅在类级别声明相比,将泛型类声明为返回类型是否有任何好处?

    //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>。除此之外,是否有任何重大差异和/或好处?

2 个答案:

答案 0 :(得分:6)

如果在类级别声明它,则无法在同一个类实例上调用具有不同类型参数的函数。
换句话说,类型成为实例的属性,而不是每个函数调用的属性。

答案 1 :(得分:1)

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