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

Java 方法调用中通配符的奇怪行为,java,wildcard,bounded-wildcard,unbounded-wildcard,Java,Wildcard,Bounded Wildcard,Unbounded Wildcard,我正在浏览Java中的通配符主题,我被下面的代码卡住了 static <T> void type(List<? super T> list){ //... } static <T> void type2(List<? extends T> list){ //... } static void type(列表很抱歉…根据需要进行更新您不应该在第一个代码块中看到错误。另外,Long lng=90;应该是Long

我正在浏览Java中的通配符主题,我被下面的代码卡住了

  static <T> void type(List<? super T> list){
      //...
  }
  static <T> void type2(List<? extends T> list){
      //...
  }

static void type(列表很抱歉…根据需要进行更新您不应该在第一个代码块中看到错误。另外,
Long lng=90;
应该是
Long lng=90L;
。请提供一个(我认为这对您来说更简单,对潜在的回答者来说更简单…)哎哟:第一个块确实会导致错误,但只有在
javac
中,而不是在Eclipse中。确实令人惊讶(但可能是由我在这里使用的旧Eclipse版本引起的…)虽然,不可否认,现在我还不能完全确定
javac
是错误的还是Eclipse编译器是错误的。+1。不,不是
T=Object
,对不起。Eclipse推断
T
是与捕获相同的类型。
T=Object
只适用于
?扩展了T
版本。
List<?> unbounded=new ArrayList<Long>();
//! type(unbounded); //:Error here
//! type2(unbounded); //:Same Error here
  static <T> void type(List<? super T> list, T arg){
      //...
  }
  static <T> void type2(List<? extends T> list, T arg){
      //...
  }
List<?> unbounded=new ArrayList<Long>();
Long lng=90L;
//! type(unbounded,lng); //:Error here
type2(unbounded,lng); //No error in this one now