为什么使用泛型类作为原始类型会杀死所有包含的泛型?

时间:2016-04-19 12:23:33

标签: java generics

为什么

class Foo<T> {
}

class Bar<T> {
   List<Foo<?>> getFoos() {
      return null;
   }
}

class Baz {
   void baz(Bar bar) {
      for (Foo foo : bar.getFoos()); 
//                              ^
//error: incompatible types: Object cannot be converted to Foo
   }
}

时出现编译错误
class Foo<T> {
}

// changed Bar<T> to Bar
class Bar {
   List<Foo<?>> getFoos() {
      return null;
   }
}

class Baz {
   void baz(Bar bar) {
      for (Foo foo : bar.getFoos());
   }
}

class Foo<T> {
}

class Bar<T> {
   List<Foo<?>> getFoos() {
      return null;
   }
}

class Baz {
   // changed Bar to Bar<?>
   void baz(Bar<?> bar) {
      for (Foo foo : bar.getFoos());
   }
}

class Foo<T> {
}

class Bar<T> {
   List<Foo<?>> getFoos() {
      return null;
   }
}

class Baz {
   void baz(Bar bar) {
      // changed Foo to Object
      for (Object foo : bar.getFoos());
   }
}

编译好。

或者更确切地说,如果父实例是泛型类的原始类型,bar.getFoos()为什么会返回List<Object>而不返回List<Foo<?>>

0 个答案:

没有答案