相关疑难解决方法(0)

javac和Eclipse编译器有什么区别?

Eclipse的Java编译器只是程序所在的同一个核心的包装器javac,还是一个单独的编译器?如果是后者,为什么他们会重新发明轮子?

java eclipse javac

192
推荐指数
4
解决办法
6万
查看次数

方法调用中通配符的奇怪行为

我正在阅读Java中的通配符主题,我在下面的代码中遇到了困难

  static <T> void type(List<? super T> list){
      //...
  }
  static <T> void type2(List<? extends T> list){
      //...
  }
Run Code Online (Sandbox Code Playgroud)

如果您通过此代码调用这些方法,则会出错并且这是可以理解的

List<?> unbounded=new ArrayList<Long>();
//! type(unbounded); //:Error here
//! type2(unbounded); //:Same Error here
Run Code Online (Sandbox Code Playgroud)

但是如果你通过添加一个额外的arg来改变这些方法的签名,就像这样

  static <T> void type(List<? super T> list, T arg){
      //...
  }
  static <T> void type2(List<? extends T> list, T arg){
      //...
  }
Run Code Online (Sandbox Code Playgroud)

然后打电话给他们

List<?> unbounded=new ArrayList<Long>();
Long lng=90L;
//! type(unbounded,lng); //:Error here
type2(unbounded,lng); //No error in this one now
Run Code Online (Sandbox Code Playgroud)

为什么这种行为只需添加一个额外的arg?有限的列表如何通过添加一个xtra arg来接受无界的?

java wildcard bounded-wildcard unbounded-wildcard

5
推荐指数
0
解决办法
93
查看次数