java 类型通配符 ?

Java泛型中的通配符 今天我们来聊一聊Java中的通配符~ 由于严格的泛型类型让程序员使用起来并不是那么方便,Java设计者于是就设计了一种巧妙并且安全的解决方案——通配符 阅读详情

如果对上篇文章的泛型有所了解后,还需要了解下类型通配符,在java中类型通配符是?
可以将一个类型通配符?,作为类型实参,传递给一个泛型类或者泛型接口。如:List

public class Test {

    public static void main(String[] args) {

        List<Integer> list=new ArrayList<>();
        list.add(2);
        list.add(2);
        list.add(2);
        list.add(2);
        sys(list);
    }

    public static void sys(List<?> c){
        for (int i = 0; i < c.size(); i++) {
            System.out.println(c.get(i));
        }
    }
}

这样,无论我们使用什么样的类型实参数据集合,方法都能正常工作。因为c集合中的所有元素,其类型都是Object的,永远是安全的。

但是这中带通配符的List仅表示它是各种泛型List的父类,并不能把元素添加进去。如下:

        List<?> c=new ArrayList<>();
        //编译不通过,
        c.add("s");

因为程序无法确定c集合中元素类型,所以不能添加元素。List< E >接口的定义,add(E e)元素的时候必须是E类的对象或E类子类的对象。使用了类型通配符后,程序不知道E是什么类型,所以程序无法将任何对象添加到集合中。唯一例外的是null,它是所以引用类型的实例。如下:

        List<?> c=new ArrayList<>();
        //编译通过
        c.add(null);
  • 设定类型通配符上限
    像之前的List
public class Test {

    public static void main(String[] args) {

        List<Pet> pList=new ArrayList<Pet>();
        pList.add(new Pet());
        pList.add(new Pet());
        pList.add(new Pet());
        //子类对象
        pList.add(new Dog());
        sys(pList);

    }

    public static void sys(List<? extends Pet> c){
        for (int i = 0; i < c.size(); i++) {
            System.out.println(c.get(i));
        }
    }
}

执行结果:

fanxing.Pet@15db9742
fanxing.Pet@6d06d69c
fanxing.Pet@7852e922
fanxing.Dog@4e25154f

在这个例子中,想使用这个sys()方法,那么传进来的集合元素必须是Pet类的对象或者是Pet子类的对象(要么是上限类的对象,要么是上限类子类的对象)

STM32N6:MCU+NPU架构如何重塑边缘AI部署新范式 STM32N6作为业界首款MCU+NPU架构的通用微控制器,通过集成600 GOPS算力的NPU与800MHz Cortex-M55内核,实现了边缘AI部署的革命性突破。该方案在工业视觉和智能家居等场景中,以超低功耗和成本提供实时AI处理能力,性能较传统MCU提升超100倍,重塑了边缘智能设备的设计范式。 阅读详情

相关推荐

【Python爬虫案例教学】超简洁代码采集原神所有角色信息

(。・∀・)ノ゙嗨 大家好,这里是池鱼

xiaoyuan_____的博客 2419

类型通配符

类型通配符 类型通配符的作用 ​ 为了表示各种泛型List的父类,可以使用类型通配符 类型通配符的分类 类型通配符:<?> List<?>:表示元素类型未知的List,它的元素可以匹配任何的类型 这种带通配符的List仅表示它是各种泛型List的父类,并不能把元素添加到其中 类型通配符上限:<? extends 类型> List<? ex...

熊猫拿铁 623

Node.js内存溢出?一招搞定JavaScript heap out of memory错误(附永久配置方案)

本文深入解析Node.js内存溢出问题,提供从临时调整到永久配置的完整解决方案。重点介绍通过设置`max-old-space-size`参数和`NODE_OPTIONS`环境变量来扩展JavaScript堆内存限制,适用于Webpack、Vite等构建工具的大型项目场景,并涵盖Windows、Linux/macOS多平台配置方法。

cake8的博客 1054

java 类型通配符_Java 之 类型通配符

一、类型通配符当声明一个方法时,某个形参的类型是一个泛型类或泛型接口类型,但是在声明方法时,又不确定该泛型实际类型,可以考虑使用类型通配符。先来看下面一个案例1 public static voidtest(List c){2 for (int i = 0; i < c.size(); i++) {3 System.out.println(c.get(i));4 }5...

weixin_39870092的博客 582

手把手教你为高云DDR3控制器添加物理约束:从位置锁定到参数配置

本文详细介绍了在高云FPGA平台上为DDR3控制器添加物理约束的实战指南,从位置锁定到参数配置。通过解析高云DDR3控制器的架构,提供关键模块的位置约束和参数调优方法,帮助开发者解决时序不稳定、初始化失败等常见问题,实现稳定可靠的DDR3接口。

weixin_33738555的博客 272

Ubuntu22.04下3分钟搞定GitHub加速:SwitchHosts+小鱼工具保姆级配置指南

本文提供Ubuntu22.04下快速解决GitHub下载超时问题的保姆级教程,通过SwitchHosts图形化工具和小鱼一键换源工具实现高效加速。详细步骤包括环境准备、工具安装配置及验证方法,帮助开发者轻松优化GitHub访问速度,提升工作效率。

weixin_29258297的博客 564

Java通配符看这一篇就够

推荐你阅读。

howard1209a的博客 1538

27-eMMC电路设计

eMMC硬件电路设计

weixin_66510961的博客 4005

java通配符

Java泛型中的标记符含义:   E - Element (在集合中使用,因为集合中存放的是元素)  T - Type(Java 类)  K - Key(键)  V - Value(值)  N - Number(数值类型) ? -  表示不确定的java类型 关键字说明 ●  ? 通配符类型 ●  表示类型的上界,表示参数

帅性而为1号的博客 1580

为何LPDDR4支持on-die ECC,但是DDR4却不支持呢?

DRAM的ECC,目前的编码方式都是128bit data,产生8bit parity或者ECC code. 而且必须要128bit才行。这8bit的ECC code是要被写入到DRAM内存里面的,从而read的时候,可以读取这8bit ECC code来判定read data是否有错,如果是SBF,就可以纠错了,如果是double bit,大部分时候是可以detect到错误,即所谓的SEC(Single Error Correct) + DED(Double Error Detect).

一个DRAM从业者的告白 1555

2、Minikube安装Ingress

文章目录前言一、Ingress安装二、Ingress Demo1.创建一个pod和service2.部署ingress3.添加minikube域名映射三、遇到的坑 前言 上篇介绍了Minikube的安装,本篇介绍一下如何在Minikube中安装Ingress。 一、Ingress安装 Ingress安装很简单,Minikube里面带了Ingress附件。 安装Ingress minikube addons enable ingress 禁用Ingress minikube addons disa

star_apple的博客 3071

Java 类型通配符

假设需要定义一个方法,该方法里有一个集合形参,集合形参的元素类型是不确定的,那应该怎么定义呢? 在下面代码中: 本文包含: 使用类型通配符 设定类型通配符的上限 设定类型形参的上限 1. 使用类型通配符 为了表示各种泛型 List 的父类,可以使用类型通配符(?),将问号作为类型实参传给 List 集合,写作:List<?>(意思是元素类型未知的 List),此问号的元素类型可...

黑白灰的博客 7779

使用everything出现mem_virtual_alloc(): Fatal Error: out of memory解决方案

本文主要介绍了使用everything出现mem_virtual_alloc(): Fatal Error: out of memory解决方案,希望能对使用everything的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

java 类型通配符_java中泛型之类型通配符(?)

实体类package cn.xy.model;/*** 生物类* @author xy**/public class Living{private String name;public Living(String name){super();this.name = name;}public String getName(){return name;}public void setName(Stri...

weixin_35697229的博客 145

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java的类型通配符实战

一点睛 List<String>对象不能被当成List<Object>对象使用,也就是说:List<String>类并不是List<Object>类的子类。 数组和泛型有所不同:假设Foo是Bar的一个子类型(子类或者子接口),那么Foo[]依然是Bar[]的子类型;但G<Foo>不是G<Bar>的子类型。...

实践求真知 772

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

java 类型通配符_Java中泛型之类型通配符(?)

实体类package cn.xy.model;/*** 生物类* @author xy**/public class Living{private String name;public Living(String name){super();this.name = name;}public String getName(){return name;}public void setName(Stri...

weixin_29605297的博客 102

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java泛型 类型通配符_Java泛型--通配符类型

java的通配符类型实在令人头疼。通配符的概念下面的讨论基于一下三个类的定义:public class Employee {private String name;private double salary;private LocalDate hireDay;}public class Manager extends Employee {public Manager(String name, do...

weixin_42299244的博客 410

Java泛型(四):类型变量的限定、通配符类型

Java的泛型除了可以直接使用类型变量(如T等),如果有需要的话,我们还可以对其进行一定的限制,如规定某类型变量必须是“扩展”了某个类或者方法的。借助类型绑定和通配符我们就可以对类型变量进行限定。

Ju的博客 5053

java 超类型通配符_java泛型程序设计——通配符类型+通配符的超类型限定

【0】README0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java泛型程序设计 的 通配符类型+通配符的超类型限定 的知识;【1】通配符类型相关1.1)通配符类型: Pair < ? extends Employee> 表示任何泛型Pair 类型, 它的类型参数是 Employee的子类 , 如 Pair , 但不是 Pair1.2)问题+...

weixin_33318720的博客 382

java 通配符 类_Java类型通配符应用实战分析

本文实例讲述了Java类型通配符。分享给大家供大家参考,具体如下:一 点睛List对象不能被当成List对象使用,也就是说:List类并不是List类的子类。数组和泛型有所不同:假设Foo是Bar的一个子类型(子类或者子接口),那么Foo[]依然是Bar[]的子类型;但G不是G的子类型。为了表示各种泛型List的父类,我们需要使用类型通配符,类型通配符是一个问号(?),将一个问号作为类型实参传给L...

weixin_29072299的博客 277

java-类型通配符

类型通配符 类型通配符的作用 ​ 为了表示各种泛型List的父类,可以使用类型通配符 类型通配符的分类 类型通配符:<?> List<?>:表示元素类型未知的List,它的元素可以匹配任何的类型 这种带通配符的List仅表示它是各种泛型List的父类,并不能把元素添加到其中 类型通配符上限:<? extends 类型> List<? extends Number>:它表示的类型是Number或者其子类型(也就是最大的就是Number类型)

weixin_57830401的博客 682

java--通配符类型

自己整理了下发现理解起来蛮困难的 http://blog.youkuaiyun.com/fw0124/article/details/42296283 这篇博文说的很详细,推荐看 以下是我按照博文总结的泛型中使用通配符的两种类型: (1)子类型限定< ? extends xxx >(只读) (2)超类型限定< ? super xxx >关于子类型限定的作用: (1)子类型限定< ? extends

hello_bravo_的博客 2379

java类型通配符_java泛型详解--通配符

通配符>总体说明:1、表示不限定通配符,通常与集合配合使用。2、集合类中所用类型,不继承父子关系。如Base是基类,Child为Base的子类,则List 和 List 不具备继承关系,并且二者没有任何关系。3、 extends T> 称为上线通配符,表示 T类型及其T子类。4、 super T> 称为下线通配符,表示 T类型及其父类。无限定通配符>:1、通常与集合配合使...

weixin_30667487的博客 441

Java学习day057 泛型类型的继承规则、通配符类型(通配符概念、通配符的超类限定、无限定通配符、通配符捕获)

使用的教材是java核心技术卷1,我将跟着这本书的章节同时配合视频资源来进行学习基础java知识。 day057 泛型类型的继承规则、通配符类型(通配符概念、通配符的超类限定、无限定通配符、通配符捕获) 目录 day057 泛型类型的继承规则、通配符类型(通配符概念、通配符的超类限定、无限定通配符、通配符捕获) 1.泛型类型的继承规则 2.通配符概念 3.通配符的超类型限定 ...

Zzehao的博客 1091

java泛型-类型通配符

java泛型-类型通配符 类型通配符 类型通配符一般是用“?”代替具体的类型实参 所以,类型通配符是类型实参,而不是类型形参 通配符的上限 语法 类/接口 <? extends 实参类型> 要求该泛型的类型,只能是是实参类型,或实参类型的子类型 代码示例 //bean对象,泛型类 public class Box<E> { private E first; public E getFirst() { return first; } public v

weixin_42455070的博客 586

Java泛型之通配符类型

【代码】Java泛型之通配符类型。

十三阿哥的博客 778
上一篇: java 深入理解泛型
下一篇: java设计模式 单例模式
彼天
博客等级 码龄11年 37粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值