泛型通配符与泛型的使用总结

泛型通配符
当使用泛型类或者接口时,传递的数据中,泛型类型不确定,可以通过通配符<?>表示。但是一旦使用泛型的通符后,只能使用Object类中的共性方法,集合中元素自身方法无法使用。
通配符基本使用
泛型的通配符:不知道使用什么类型来接收的时候,此时可以使用?,?表示未知通配符。此时只能接受数据,不能往该集合中存储数据。

通配符高级使用----受限泛型
之前设置泛型的时候,实际上是可以任意设置的,只要是类就可以设置。但是在JAVA的泛型中可以指定一个泛的上限和下限。
泛型的上限︰
·格式︰类型名称<? extends类〉对象名称。意义︰只能接收该类型及其子类
泛型的下限︰
·格式︰类型名称<? super类〉对象名称。意义︰只能接收该类型及其父类型 

 

第一种

package Generic01_Demo01;

import java.util.ArrayList;
import java.util.Iterator;

/*
    泛型的通配符:
    ?:代表任意的数据类型
    使用方式:
    不能创建对象使用
    只能作为方法的参数使用
 */
public class Demo05Generic {
    public static void main(String[] args) {
        ArrayList<Integer> listpro = new ArrayList<>();
        listpro.add(1);
        listpro.add(2);

        ArrayList<String> listmax = new ArrayList<>();
        listmax.add("a");
        listmax.add("b");

        printArray(listpro);
        printArray(listmax);

    }
      /*
        定义一个方法,能遍历所有类型的ArrayList集合
    这时候我们不知道ArrayList集合使用什么数据类型,可以泛型的通配符?来接收数据类型
         */
    public static void printArray(ArrayList<?> list){
        //使用迭代器遍历集合
        Iterator<?> iterator = list.iterator();

        while (iterator.hasNext()){
            //it.next()方法,取出的元素是object,可以接收任意的数据类型
            Object next = iterator.next();
            System.out.println(next);
        }
    }

}

第二种

package Generic01_Demo01;

import java.util.ArrayList;
import java.util.Collection;

/*
泛型的上限限定:? extends E代表使用的泛型只能是E类型的子类/本身
泛型的下限限定:? super E代表使用的泛型只能是E类型的父类/本身
 */
public class Demo06Generic {
    public static void main(String[] args) {
        Collection<Integer> list1 = new ArrayList<>();
        Collection<String> list2 = new ArrayList<>();
        Collection<Number> list3 = new ArrayList<>();
        Collection<Object> list4 = new ArrayList<>();

        getElement1(list1);
        //getElement1(list2);  报错
        getElement1(list3);
        //getElement1(list4);  报错


        getElement2(list1);
        //getElement2(list2); 报错
        getElement2(list3);
        //getElement2(list4); 报错

        /*
        类与类之间的继承关系
        Integer extends Number extends  Object
        String extends object
         */

    }
    //泛型的上限∶此时的泛型?,必须是Number类型或者Number类型的子类
    public static void getElement1(Collection<?extends Number>coll){}
    //泛型的下限∶此时的泛型?,必须是Number类型或者Number类型的父类
    public static void getElement2(Collection<?extends Number>coll){}
}

 

 

泛型的使用

1.泛型类和泛型方法

类名<泛型>
方法名(泛型)  

package Generic01_Demo01;

public class MyClass<T> {
    public  void  print(T t){
        System.out.println(t);
    }

}

 

package Generic01_Demo01;

public class Test01 {
    public static void main(String[] args) {
        MyClass<String> myClass1 = new MyClass<>();
        myClass1.print("Hello");

        MyClass<Integer> myClass2 = new MyClass<>();
        myClass2.print(50);
    }
}

 

⒉泛型接口和泛型方法

接口名<泛型>
方法名(泛型)

package Generic01_Demo01;

public interface Myinter<O> {
    public  abstract void print(O o);
}

 

package Generic01_Demo01;

public class MyinterlmoI<O> implements Myinter<O> {
    @Override
    public void print(O o) {
        System.out.println(o);

    }
}

 

{
    public static void main(String[] args) {
        MyClass<String> myClass1 = new MyClass<>();
        myClass1.print("Hello");

        MyClass<Integer> myClass2 = new MyClass<>();
        myClass2.print(50);

        System.out.println("**************************");

        MyinterlmoI<String> myinterlmoI = new MyinterlmoI<>();
        myinterlmoI.print("World");

        MyinterlmoI<Double> objectMyinterlmoI = new MyinterlmoI<>();
        objectMyinterlmoI.print(5.5);
    }
}

 

3.泛型通配符

package Generic01_Demo01;

import java.util.ArrayList;

public class Test02 {
    public static void main(String[] args) {
        ArrayList<String> list1 = new ArrayList<>();

        list1.add("Hello");
        list1.add("World");
        list1.add("Java");

        ArrayList<Integer> list = new ArrayList<>();
            list.add(10);
            list.add(20);
            list.add(30);


    }
    public static void print(ArrayList<?> list){
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }
}

 

posted @ 2022-07-06 14:27  zj勇敢飞,xx永相随  阅读(61)  评论(0编辑  收藏  举报