泛型通配符 ?

泛型通配符 ? 任意类型 

注意:在泛型中是不能用多态的

例:

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 }
原文地址:https://www.cnblogs.com/jack4738/p/6962184.html