假设我们有一个通用声明
interface Foo<T> T get(); void set(T); void bet();
原始类型
Foo等效于声明为
interface Foo Object get(); void set(Object); void bet(); // all generics info are stripped
例如,在Java 5中
List<E>,其原始版本
List包含与java5之前的
List接口完全相同的方法签名。原始类型用于向后兼容。
Raw
List很接近
List<Object>; 但是与
List<?>
foo类型的对象
Foo<?>的类型为
interface Foo<X> X get(); void set(X); void bet();
对于某些确定的(尽管未知)类型X。尽管X是未知的,我们仍然可以调用
foo.get()和
foo.bet()。但是我们无法调用,
foo.set(a)因为无法知道是否
a为未知类型
X-除非
a为
null。



