Java泛型 通配符详解
文章目录 用法简介 数组协变 `<? extends 类型>`获得泛型类的“协变” `<? extends 类型>`与`<? super 类型>` JDK实际例子 通配符与泛型方法的类型推断 泛型方法和泛型类中只是使用了类型参数的方法 带通配符的引用之间赋值必须相容 总结 用法简介 通配符 ? 后只允许出现一个边界。 通配符只允许出现在引用中(普通变量引用、形参),一般是用作 <? extends 具体类型> 或者 <? super 具体类型> 。相对地,比如通配符不允许出现在泛型定义中(泛型类、泛型接口、泛型方法的 < > 里), class one<? extends Integer> {} 这样是不允许的,类定义时继承泛型类时的 < > 里也不可以出现。在泛型类或泛型方法的 { } 里还有泛型方法的形参上,配合占位符,甚至可以使用 ? extends T 或者 ? super T 这种形式来用作引用。 在new泛型类的时候也不可以使用通配符,比如 new ArrayList<?>() 。泛型方法的显式类型说明也不可以使用通配符。 数组协变 具体讲通配符之前,有必要先讲一下数组协变。数组协变可以理解为多态,即子类对象数组可以向上转型为父类对象数组的引用。由于java里的数组在初始化后一定会记住元素的类型,虽然数组协变会带来一些问题(下例就会演示),但有了