抽象泛型类作为方法参数的问题

wsgqp Java面向对象之泛型 2016年10月14日提问

  • 0 回答
  • 528 浏览

您好,老师:

我定义了下面两个类,如下:

public abstract class AbstractOnLoadListener<T> {public abstract void onSuccess(T obj);}
public class ExampleUnitTest {
    @Test
    public void addition_isCorrect() throws Exception {
        getData(new AbstractOnLoadListener<ZhihuThemes>(){
            @Override
            public void onSuccess(ZhihuThemes obj) {}
        });
    }
    public void getData(final AbstractOnLoadListener listener) {
        listener.onSuccess(getGsonObject());
    }
    public static Object getGsonObject(){
        return new ZhihuThemes();
    }
}

我想请问下类ExampleUnitTest 中的方法 getData 的参数

final AbstractOnLoadListener listener

写法和下面这几种写法有什么区别

第一种写法:final AbstractOnLoadListener<?> listener
第二种写法:final AbstractOnLoadListener<T extends Object> listener
第三种写法:final AbstractOnLoadListener<T super Object> listener

为什么我改成上面三种任何写法都编译不通过?

而写成 final AbstractOnLoadListener listener 就可以编译通过呢?

还有,final AbstractOnLoadListener listener作为类ExampleUnitTest中方法getData的参数为什么不需要携带类型?

谢谢老师,还望不吝赐教