ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

一篇让你彻底搞懂java泛型通配符的文章

2022-06-17 23:02:33  阅读:145  来源: 互联网

标签:printCollection java list1 List 通配符 泛型 搞懂 public


 转自:

 http://www.java265.com/JavaJingYan/202206/16540949953608.html

泛型:通常定义一些以后使用的类型,在代码编写时,类型采用占位符的形式,当然这些占位符,也可以设置其上限,下限等。
下文笔者将用一篇文章,让你彻底明白java泛型通配符,如下所示

泛型通配符的简介

泛型通配符:“指可以匹配任意类型”的类型,我们将其称之为“通配符”
在java中有三种类型的通配符,分别为:
  无界,有上限,有下限
 那么他们分别表示什么呢?下文笔者将一一道来,如下所示:
泛型无界通配符
无边界通配符(Unbounded Wildcards):
   让泛型可接收任意未知类型的数据
采用 ? 形式定义
 如: List<?> 
泛型有上界通配符
泛型上界通配符(Upper bounded Wildcards):
   让泛型可接收指定类及其子类的数据
采用 ? extends E  形式定义
 如: List<? extends E>
    可接收类型为E,或者E的子类 
泛型有下界通配符
泛型下界通配符(Lower bounded Wildcards):
   让泛型可接收指定类及其父类类的数据
采用 ? super E  形式定义
 如: List<? super E>
    可接收E类或者它的父类 

Java泛型通配符的示例分享

例:
定义一个方法可以打印任意类型集合的数据

public class GernericTest {
    public static void main(String[] args) throws Exception{
        List<Integer> list1 =new ArrayList<Integer>();
        List<String>  list2 =new ArrayList<String>();
        printCollection(list1);
        printCollection(list2);    
    } 
    public static void printCollection(Collection<Object> collection){
        for(Object obj:collection){
            System.out.println(obj);
        }  
    }
}
以上代码会报错:
语句 printCollection(list1); 报错:
The method printCollection(Collection<Object>) in the type GernericTest is not applicable for the arguments (List<Integer>)
因为泛型不能使用继承属性,必须使用?通配符

正确的写法:
public class GernericTest {
    public static void main(String[] args) throws Exception{
        List<Integer> list1 =new ArrayList<Integer>();
        List<String> list2 =new ArrayList<String>();
        printCollection(list1);
        printCollection(list2);
    }

    //定义泛型无界通配符
    public static void printCollection(Collection<?> collection){
        for(Object obj:collection){
            System.out.println(obj);
        }
    }
}

标签:printCollection,java,list1,List,通配符,泛型,搞懂,public
来源: https://www.cnblogs.com/java265/p/16336090.html

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

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

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

ICode9版权所有