返回顶部
首页 > 资讯 > 后端开发 > JAVA >了解java中的通配符“?“
  • 888
分享到

了解java中的通配符“?“

java开发语言 2023-09-17 19:09:49 888人浏览 独家记忆
摘要

目录 通配符的作用         先看一段代码         用通配符"?"后,代码变化         结论 通配符上界  通配符下界 对通配符上下界的注释理解及其练习代码   简记: ?  用于在泛型的使用,即为通配符.

目录

通配符的作用

        先看一段代码

        用通配符"?"后,代码变化

        结论

通配符上界 

通配符下界

对通配符上下界的注释理解及其练习代码  


简记: ?  用于在泛型的使用,即为通配符.
在Java中,通配符(wildcard)主要用于泛型编程,用于表示一个不确定的类型。
通配符有三种形式:1.通配符  2.通配符   3. 通配符

通配符的作用

先看一段代码

class Test0 {    public static void main(String[] args) {        System.out.println("===========1.String==============");        Message message1 = new Message<>();        message1.setMessage("fly in the sky!");        fun1(message1);        System.out.println("===========2.Integer=============");        Message message2 = new Message<>();        message2.setMessage(99);        fun2(message2);        System.out.println("===========3.Character============");        Message message3 = new Message<>();        message3.setMessage('s');        func3(message3);        System.out.println("===========4.Short================");        Message message4 = new Message<>();        message4.setMessage((short) 213);        func4(message4);        System.out.println("===========5.Long=================");        Message message5 = new Message<>();        message5.setMessage(1024L);        func5(message5);        System.out.println("===========6.Float=================");        Message message6 = new Message<>();        message6.setMessage(3.1415926f);        func6(message6);        System.out.println("===========7.Double================");        Message message7 = new Message<>();        message7.setMessage(1024.0213);        func7(message7);        System.out.println("===========8.Boolean===============");        Message message8 = new Message<>();        message8.setMessage(true);        func8(message8);    }    public static void fun1(Message tmp) {        System.out.println(tmp.getMessage());    }    public static void fun2(Message tmp) {        System.out.println(tmp.getMessage());    }    public static void func3(Message tmp) {        System.out.println(tmp.getMessage());    }    public static void func4(Message tmp) {        System.out.println(tmp.getMessage());    }    public static void func5(Message tmp) {        System.out.println(tmp.getMessage());    }    public static void func6(Message tmp) {        System.out.println(tmp.getMessage());    }    public static void func7(Message tmp) {        System.out.println(tmp.getMessage());    }    public static void func8(Message tmp) {        System.out.println(tmp.getMessage());    }}

用通配符"?"后,代码变化

class Test1 {    public static void func(Message temp) {        System.out.println(temp.getMessage());    }    public static void main(String[] args) {        System.out.println("===========1.String==============");        Message message1 = new Message<>();        message1.setMessage("fly in the sky!");        func(message1);        System.out.println("===========2.Integer=============");        Message message2 = new Message<>();        message2.setMessage(99);        func(message2);        System.out.println("===========3.Character============");        Message message3 = new Message<>();        message3.setMessage('s');        func(message3);        System.out.println("===========4.Short================");        Message message4 = new Message<>();        message4.setMessage((short) 213);        func(message4);        System.out.println("===========5.Long=================");        Message message5 = new Message<>();        message5.setMessage(1024L);        func(message5);        System.out.println("===========6.Float=================");        Message message6 = new Message<>();        message6.setMessage(3.1415926f);        func(message6);        System.out.println("===========7.Double================");        Message message7 = new Message<>();        message7.setMessage(1024.0213);        func(message7);        System.out.println("===========8.Boolean===============");        Message message8 = new Message<>();        message8.setMessage(true);        func(message8);    }}

结论

结论:使用通配符"?"可以接收所有的泛型类型,从而大大减少代码量,


 注:虽然通配符 "?" 可以接受任意类型,但正因为如此,由于不确定类型,所以在func方法中无法修改操作


在"?"的基础上又产生了两个子通配符: 
? extends 类:设置通配符上限 =>  通配符上界
? super 类:设置通配符下限 =>  通配符下界

通配符上界 

通配符上界
语法:

//可以传入的实参类型是String或者String的子类

通配符的上界,不能进行写入数据,只能进行读取数据

 通配符下界

通配符下界                                                                                                             
语法:
                            
//代表 可以传入的实参的类型是 Integer或者 Integer的父类类型 

通配符的下界,不能进行读取数据,只能写入数据

class Food {}class Fruit extends Food {}class Apple extends Fruit {}class Banana extends Fruit {}

对通配符上下界的注释理解及其练习代码  

class Food {}class Fruit extends Food {}class Apple extends Fruit {}class Banana extends Fruit {}class Plate {//设置泛型    private T message;    public T getMessage() {        return message;    }    public void setMessage(T message) {        this.message = message;    }}public class Test2 {    public static void main1(String[] args) {        Plate applePlate = new Plate<>();        applePlate.setMessage(new Apple());        func1(applePlate);        Plate bananaPlate = new Plate<>();        bananaPlate.setMessage(new Banana());        func1(bananaPlate);    }    //通配符的上界    //通配符的上界,不能进行写入数据,只能进行读取数据    public static void func1(Plate tmp) {        //这里仍然不可以进行修改!tmp接收的是Fruit和他的子类,此时存储的元素应该是哪个子类无法确定。        System.out.println(tmp.getMessage());        Fruit b = tmp.getMessage();//向上转型        System.out.println(b);    }    //通配符的下界    //通配符的下界,不能进行读取数据,只能写入数据    public static void main(String[] args) {        Plate fruitPlate = new Plate<>();        fruitPlate.setMessage(new Fruit());        func2(fruitPlate);        Plate foodPlate = new Plate<>();        foodPlate.setMessage(new Food());        func2(foodPlate);    }    public static void func2(Plate tmp) {        //传入参数为Fruit及其父类 ,        //此时可以修改!!添加的是Fruit 或者Fruit的子类        tmp.setMessage(new Apple());        tmp.setMessage(new Fruit());        //不能接收,这里无法确定是哪个父类,父类太多了    }}

  
 

来源地址:https://blog.csdn.net/m0_73740682/article/details/132580799

--结束END--

本文标题: 了解java中的通配符“?“

本文链接: https://lsjlt.com/news/411328.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 了解java中的通配符“?“
    目录 通配符的作用         先看一段代码         用通配符""后,代码变化         结论 通配符上界  通配符下界 对通配符上下界的注释理解及其练习代码   简记:  用于在泛型的使用,即为通配符. 在J...
    99+
    2023-09-17
    java 开发语言
  • Java generic中通配符的理解有哪些
    本篇文章给大家分享的是有关Java generic中通配符的理解有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。置换原则结合Java本身的一些面向对象的特性,我们很容易理解...
    99+
    2023-06-17
  • 最新Java 泛型中的通配符讲解
    目录一、什么是类型擦除?二、案例实体准备三、常用的 ?, T, E, K, V, N的含义四、上界通配符 < extends E>五、下界通配符 < super...
    99+
    2024-04-02
  • java中有哪些通配符
    这篇文章将为大家详细讲解有关java中有哪些通配符,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于Java...
    99+
    2023-06-14
  • Java泛型通配符的使用详解
    目录泛型在继承方面的体现通配符的使用 有限制条件的通配符的使用自定义泛型的测试泛型在继承方面的体现 类A是类B的父类,G<A>和G<B>二者不具有子...
    99+
    2023-01-13
    Java泛型通配符
  • Java基础之java泛型通配符详解
    前言 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。 泛型的本质是参数化类型,也...
    99+
    2024-04-02
  • Java中有哪些泛型通配符
    今天就跟大家聊聊有关Java中有哪些泛型通配符,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式...
    99+
    2023-06-14
  • java中界通配符如何使用
    本篇文章为大家展示了java中界通配符如何使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。说明上限通配符可用于放松对变量的限制。举例来说,假设你想写一个处理List、List和List的方法,那么...
    99+
    2023-06-20
  • java通配符怎么用
    本文小编为大家详细介绍“java通配符怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“java通配符怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、通配符,代表未知类型,代表不关心或无法确定实际操作...
    99+
    2023-06-30
  • Linux 中的通配符详解及实例
    Linux 中的通配符详解及实例 一 通配符 二 实战 [root@localhost ~]# mkdir dy [root@localhost ~]# cd dy [root@localhost...
    99+
    2022-06-04
    通配符 详解 实例
  • java中如何使用下界通配符
    这篇文章给大家介绍java中如何使用下界通配符,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。说明下限通配符将未知类型限制为特定类型或超类型。下界通配符使用通配符(''),表示后面是super关键词,然后...
    99+
    2023-06-20
  • java中如何使用无界通配符
    这期内容当中小编将会给大家带来有关java中如何使用无界通配符,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。说明如果正在编写一种可以使用Object类中提供的功能来实现的方法。无界通配符类型是使用通配符指...
    99+
    2023-06-20
  • java中通配符的使用规则有哪些
    本篇文章为大家展示了java中通配符的使用规则有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。说明定义in变量,使用上限通配符,使用extends关键字。用super关键字用下限通配符来定义ou...
    99+
    2023-06-20
  • Java中泛型与通配符的示例分析
    这篇文章主要介绍Java中泛型与通配符的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!题外话: 泛型与通配符是Java语法中比较难懂的两个语法,学习泛型和通配符的主要目的是能够看懂源码,实际使用的不多。1.泛...
    99+
    2023-06-29
  • word中的通配符有哪些
    在Word中,通配符主要有以下几种:1. 问号():表示匹配任意单个字符。例如,"ct"可以匹配"cat"、"cut"等单词。2. ...
    99+
    2023-09-29
    word
  • SQL中的通配符有哪些
    这篇文章主要介绍“SQL中的通配符有哪些”,在日常操作中,相信很多人在SQL中的通配符有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SQL中的通配符有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-27
  • 一文带你搞懂Java中的泛型和通配符
    目录概述泛型介绍和使用泛型类泛型方法类型变量的限定通配符使用无边界通配符通配符上界通配符下界概述 泛型机制在项目中一直都在使用,比如在集合中ArrayList<String, ...
    99+
    2024-04-02
  • Java 泛型的上界和下界通配符示例详解
    目录介绍上界下界上下界通配符总结介绍 Java中的泛型是一种强类型的机制,允许我们在编译时检查类型的安全性,以避免在运行时出现类型转换异常。泛型的上界和下界用于限制泛型类型参数的范...
    99+
    2023-05-14
    Java 泛型的上界和下界 Java 泛型
  • java泛型通配符怎么使用
    Java泛型通配符用于表示未知类型。在泛型类、接口和方法中使用通配符可以使其具有更大的灵活性。通配符有三种使用方式:1. 上界通配符...
    99+
    2023-09-16
    java
  • Linux中通配符的示例分析
    这篇文章主要介绍了Linux中通配符的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Linux 中的通配符详解及实例一 通配符 二 实战[root@loca...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作