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

Vam*_*ire 7 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
   }
}
Run Code Online (Sandbox Code Playgroud)

给出编译器错误

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());
   }
}
Run Code Online (Sandbox Code Playgroud)

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());
   }
}
Run Code Online (Sandbox Code Playgroud)

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());
   }
}
Run Code Online (Sandbox Code Playgroud)

编译好.

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