Java generic return type is not used in parameter

In the Java library, I encountered a method that uses a generic return type, which is not used in any way in the parameters:

<T extends ResponseCallBack> T sendData(@Nonnull final OrderIf checkoutOrder,@Nullable final List<NameValueIf> ccParmList) throws Exception;

(responsecallback is an interface here)

What is the difference between this signature:

ResponseCallBack sendData(@Nonnull final OrderIf checkoutOrder,@Nullable final List<NameValueIf> ccParmList)

Solution

The difference is that you can use this special version for method linking

Check this sample program:

public class MyFoo {
    public <T extends MyFoo> T foo(){
        System.out.println("foo");
        return (T) this;
    }

    static class MyBar extends MyFoo{
        public <T extends MyBar> T bar(){
            System.out.println("bar");
            return (T) this;
        }
    }

    public static void main(String[] args) {
        final MyFoo foo = new MyFoo().foo();
        final MyBar bar1 = new MyBar().foo();
        final MyBar bar2 = new MyBar().bar();
    }

}

The assignment of bar1 variable is only possible, because < T extends myfoo >, without it, there must be a cast:

final MyBar bar1 = (MyBar) new MyBar().foo();

Unfortunately, at least in Java 7, compiler inference ends here, so you can't

new MyBar().foo().bar();
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>