泛型通配符 ? 任意类型
注意:在泛型中是不能用多态的
例:
List<Object> i = new ArrayList<String>();
× 错误原因是不同泛型之间不能相互赋值。
例:
1 package jihe; 2 import java.util.*; 3 public class Fanxing2 { 4 5 public static void main(String[] args) { 6 List<Object> i1 = new ArrayList<Object>(); 7 List<String> i2 = new ArrayList<String>(); 8 List<Number> i3 = new ArrayList<Number>(); 9 List<Integer> i4 = new ArrayList<Integer>(); 10 List<Double> i5 = new ArrayList<Double>(); 11 print(i1); 12 print(i2); 13 print(i3); 14 print(i4); 15 print(i5); 16 17 } 18 static void print(List<?> i) { 19 } 20 }
带修饰范围的 修饰符 ? extend
泛型通配符 Number 或者Number的任何子类 i3 i4 i5 通过
package jihe; import java.util.*; public class Fanxing2 { public static void main(String[] args) { List<Object> i1 = new ArrayList<Object>(); List<String> i2 = new ArrayList<String>(); List<Number> i3 = new ArrayList<Number>(); List<Integer> i4 = new ArrayList<Integer>(); List<Double> i5 = new ArrayList<Double>(); print(i1); print(i2); print(i3); print(i4); print(i5); } static void print(List<? extends Number > i) { } }
? super Number Number类或者Number的任何父类 i1 i3 通过
package jihe; import java.util.*; public class Fanxing2 { public static void main(String[] args) { List<Object> i1 = new ArrayList<Object>(); List<String> i2 = new ArrayList<String>(); List<Number> i3 = new ArrayList<Number>(); List<Integer> i4 = new ArrayList<Integer>(); List<Double> i5 = new ArrayList<Double>(); print(i1); print(i2); print(i3); print(i4); print(i5); } static void print(List<? super Number > i) { } }
? extends Coparable 让i1 和 i3 不通过 首先找String Integer Double的共性 Coparable
1 package jihe; 2 import java.util.*; 3 public class Fanxing2 { 4 public static void main(String[] args) { 5 List<Object> i1 = new ArrayList<Object>(); 6 List<String> i2 = new ArrayList<String>(); 7 List<Number> i3 = new ArrayList<Number>(); 8 List<Integer> i4 = new ArrayList<Integer>(); 9 List<Double> i5 = new ArrayList<Double>(); 10 print(i1); 11 print(i2); 12 print(i3); 13 print(i4); 14 print(i5); 15 } 16 static void print(List<? extends Comparable> i) { 17 } 18 }