ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-07-06 14:33:36  阅读:137  来源: 互联网

标签:总结 ArrayList 通配符 add void 泛型 new public


泛型通配符
当使用泛型类或者接口时,传递的数据中,泛型类型不确定,可以通过通配符<?>表示。但是一旦使用泛型的通符后,只能使用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));
        }
    }
}

 

标签:总结,ArrayList,通配符,add,void,泛型,new,public
来源: https://www.cnblogs.com/x3449/p/16450693.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有