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

raf*_*ian 1 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);
    }
Run Code Online (Sandbox Code Playgroud)

.

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

在#2的情况下,我不必<S extends Foo>为每个返回的方法重复,S因为它是在接口中声明的,尽管在使用时我必须定义为Reaper<MyType, MyFooSubType>.除此之外,是否有任何重大差异和/或好处?

SLa*_*aks 6

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