集合框架——泛型机制的使用

Java集合框架:体系结构与设计哲学之泛型与类型擦除对集合设计的影响(3) 想象进入一家没有商品标签的超市,所有货架上的物品都没有明确分类。这就是JDK5之前Java集合的状态。电子标签看似完美,但超市后台其实仍用条形码管理商品——这就是类型擦除的本质。2004年JDK5引入泛型,如同超市启用电子标签系统。 阅读详情

泛型的作用:用来约束java传参数的数据类型的一种规则

泛型的使用场景:
1、可以在接口之上使用泛型
2、可以在类之上使用泛型
3、可以在方法之上使用泛型
4、方法的参数可以使用泛型

接下来进行测试
测试文件

/**
 * 测试泛型
 * 泛型的使用场景:
 * 1、泛型可以使用在及接口之上
 * 2、泛型可以用在类上
 * 3、泛型可以使用在方法返回值类型上
 * 4、泛型可以使用在参数之上
 *
 * 泛型:就是也用来约束程序编写时数据类的一种规则。
 */
@Test
public void m1(){
    Sum<Integer,String > sum = new Sum<Integer,String>();
    sum.A1(1,"大炮仗");
    System.out.println(Sum.A2("我是一个寂寞的人"));
}

面向对象文件

public class Sum<T,E> {
    //类里面的一般方法
    public void A1(T a,E b){
        System.out.println("当前的元素是:"+a+" "+b);
    }
    //类里面有参数返回值的静态方法
    public static <E>E A2(E b){//只能有一个返回值对象
        return b;
    }
/**
 * 从主函数里面传过来什么参数,该参数就初始化为类型
 * 还可以在同一个主函数下重复调用
 */
}

运行结果
在这里插入图片描述

泛型通配符(形式):

?
? extends T
? super T

特别注意
使用泛型通配符?的时候不能使用add方法添加元素,原因是?号的类型不能确定,所以不能添加元素,但是可以将另外一个集合引用对象赋值于它。

报错结果为:
在这里插入图片描述

@Test
public void m2(){
    /**
     * 注意:使用泛型通配符<?>时,不能用.add()的方法添加元素,原因是?号的数据类型不知道
     * 但是可以将可以将另一个引用对象赋值给他,因为这个引用对象的数据类型已经都确定了
     */
    List<?> list = new ArrayList<>();
    List list01 = new ArrayList<>();
    list01.add(222);
    list01.add("dfegrt");
    list = list01;
    list01.forEach(new Consumer() {
        @Override
        public void accept(Object o) {
            System.out.println("list01当前的元素是:"+o);
        }
    });
}

或者:

@Test
public void m1(){
    Sum<?,?> sum = new Sum<>();
    Sum<Integer,String > sum01 = new Sum<>();
    sum01.A1(1,"大炮仗");
    sum = sum01;
    System.out.println(Sum.A2("我是一个寂寞的人"));
}

测试泛型机制的上限:

   /**
     * 测试泛型的上限
     *使用形式:
     * ? extends T:?表示只能是T的一个子类或本类
     */
    @Test
    public void m3(){
        List<? extends A> list = new ArrayList<>();//继承也可以多态哦
        B b = new B();
//        list.add(b);
      /**
       * 不能够添加:原因是A的子类可能不止一个(就算只有一个也不行),所以?号的类型不能确定,所以不能添加
       * 但是也可以把其他引用对象赋值给它
       */
      List<B> list1 = new ArrayList<>();
      list1.add(b);
      list = list1;
    }
    @Test
    public void m4(){
        List<? extends A> list = new ArrayList<>();//继承也可以多态哦
        C c = new C();//此处的C不是A的子类
        List<C> list2 = new ArrayList<>();
        list2.add(c);
        list = list2;//会报错,原因是C类没有继承A类
    }

总结:
泛型机制的上限? extends T:?表示只能是T的一个子类或本类,可以用于将已知确定数据类型引用对象赋值给它使用。(不能将父类用.add()方法添加进去)

泛型机制的下限

    /**
     * 测试泛型机制的下限
     * ? super T:?号表示是T类的父类或者本类
     */
    @Test
    public void m5(){
        List<? super B> list = new ArrayList();
        List<A> list01 = new ArrayList();
        B b = new B();
        A a = new A();
        C c = new C();
        list.add(b);//b是本类自己的引用对象
        list.add(c);
//        list.add(a);//a是B的父类对象,不能添加的原因是:子类对象完全可以确定
        list01.add(a);
        list = list01;
        list01.add(a);
	list = list01;
	System.out.println(list.get(1));
    }

报错结果
在这里插入图片描述
小结:
如果要添加元素监视使用下限? extends T形式
如果要把一个集合的对象引用赋值给另外一个集合,建议使用
上限? extends T的形式

编程自学指南:java程序设计开发,泛型-泛型的使用学习笔记,泛型能显著提升代码的可维护性和扩展性,尤其在处理集合、工具类、通用接口时不可或缺。 编程自学指南:java程序设计开发,泛型-泛型的使用学习笔记,泛型能显著提升代码的可维护性和扩展性,尤其在处理集合、工具类、通用接口时不可或缺。在实际开发中,泛型能显著提升代码的可维护性和扩展性,尤其在处理集合、工具类、通用接口时不可或缺。结合 PECS 原则和类型推断,可写出简洁且类型安全的代码。 阅读详情

相关推荐

45、Java泛型与集合框架全解析

本文深入解析了Java中的泛型和集合框架,涵盖了泛型超类型、通配符的使用、泛型方法的声明与限制、Java集合框架的主要数据结构以及Comparable和Comparator接口的区别与应用。通过丰富的代码示例和复习问题,帮助读者全面掌握泛型编程和集合框架的核心概念与实践技巧。

fire9的博客 69

为什么要是用集合框架?-2.Set/Iterator/Map的应用及泛型集合

1.Set接口 文章目录1.Set接口迭代器Iterator2.Map接口(独立的接口) 什么是Set接口? 如图 Set接口存储一组唯一、无序的对象 HashSet是Set接口常用的实现类 Set中存放对象的引用(请参考下面代码,且注:以下文章Set接口章节所有代码的其中类请参考博主的集合框架1) Set set = new HashSet(); String s1 = new Strin...

weixin_42476939的博客 364

集合框架和泛型机制的解释

非常详细的解释,望各位快来下载啊,不错的选择啊

java笔记总结_06_集合泛型

第11章 Java集合框架和泛型机制 1、概念  JDK API在java.util包中设计了一组专门用来存储其它对象的类,这组类被称为对象容器类,简称容器类,这组类和接口的设计结构也被称为集合框架。  Collection接口有一个超级接口:Iterator(用于遍历);

xczzmn的专栏 1721

Java集合框架和泛型机制

1、容器类   JDK API中专门设计用来存储其他对象的类,一般称为对象容器类,简称容器类,这组类和接口的设计结构也被统称为集合框架(Collection Framework)。集合框架中容器类的关系如下图示   主要从两方面来选择容器:   (1)存放要求   无序:Set,不能重复   有序:List,允许重复   “key-value”对:Map   (2)读写数据效率   Hash:两者都高。   Array:读快改慢。   Linked:读慢改快。   Tree:加入元素可排序使用。   2、泛型   应用背景:存入容器的对象在取出时需要强制转换类

必看!wechat-article-exporter:轻松批量下载公众号文章

微信搜索“”关注公众号。在信息爆炸的时代,我们每天都会接触到大量优秀的微信公众号文章。有时候,我们想要将这些精彩的内容保存下来,以便日后回顾或者分享给更多的人。然而,微信公众号并没有提供直接的批量下载功能,这给我们带来了不少困扰。今天,我要给大家分享一款非常实用的软件——wechat-article-exporter,它能够帮助我们轻松地批量下载微信公众号文章,让你不再为文章的保存而烦恼。

王乐平 技术博客 4351

黑马程序员——Map接口的使用,泛型机制,集合框架工具类Collections的使用

 一、Map:一次添加一对元素。Collection一次添加一个元素。        Map也称为双列集合,Collection集合也称为单列集合。 其实 map集合中存储的是键值对。map集合中必须保证键的唯一性。   常用方法: 添加。 value put(key,value) :返回前一个和key关联的值,如果没有,返回null。

qq373094483的专栏 503

(04730)半导体器件之基本放大器工作原理(一)

放大器是构成各种电子线路的基本单元电路。所谓“放大”,就是将输入的微弱信号(微弱变化的电压或电流等)去控制直流电源提供的能量,并使输出按照输入的小信号变化规律而变化的过程。所以放大器的本质是能量转换器。本节重点学习基本放大电路的工作原理和基本分析方法及主要性能指标。

黄先生的博客 3005

21.<简单认识Java的集合框架&包装类&泛型>

本篇博客主要讲解Java基础语法中的 集合框架、什么是集合框架、集合框架的重要性、集合框架背后所涉及到的数据结构。 包装类、装箱和拆箱、【面试题】、泛型、裸类型、泛型如何编译的、泛型如何编译的

m0_73456341的博客 1584

使用kmplot在线进行生存分析

欢迎关注”生信修炼手册”!kmplot是一个生存分析的在线工具,最初是设计用来对肝癌中的miRNA进行生存分析,对应的文章发表在scientific reports上,链接如下https...

庐州月光的博客 1万+

华为 MetaERP 总账模块依托 “交易即核算” 的事件驱动架构,与 Oracle EBS 相比,更强调业务事件自动触发财务动作、实时数据同步和智能规则引擎,实现业务与财务的深度融合

华为MetaERP总账模块采用"交易即核算"架构,相比Oracle EBS实现了三大突破:1)业务事件自动触发财务动作,如采购收货自动生成暂估凭证;2)业务财务数据实时同步,支持即时分析;3)内置智能规则引擎,实现自动匹配、核销和结转。该模块覆盖采购、销售、资产、薪酬等全业务场景,支持多维核算和关联交易自动抵消,显著提升核算效率与准确性。其中采购暂估、销售结转等场景实现全自动化处理,较EBS减少80%手工操作。

金牌架构师 222

java---集合和泛型

目录 集合​ Collection接口 ​泛型 泛型的擦除机制 使用泛型数组的注意问题 object数组的强制转化 集合 Java的集合像是一个容器,专门用于存放对象的引用,这些对象可以是任意的数据类型,并且长度可变,其中这些集合都处于java.util的包中 集合按照其存储结构可以分为两大类:单列集合Collection和双列集合Map 单列集合Collection 单列集合的根接口,用来存储一系列符合某一种规则的元素。collection集合有两个重要的子接口List和Set ..

m0_58342797的博客 1990

使用Matlab实现海洋监视雷达检测仿真

海洋监视雷达是一项重要的海洋探测技术,可以用于海上船只、飞机、潜艇等目标的探测和监视,具有广泛的应用价值。本篇文章将介绍如何使用Matlab进行海洋监视雷达的检测仿真,并提供相应的源代码。本篇文章提供了利用Matlab进行海洋监视雷达检测仿真的基本思路和代码实现。读者可以根据自己的需求进行修改和优化,以适应不同的应用场景。使用Matlab实现海洋监视雷达检测仿真。

2301_78484069的博客 448

Android-泛型类-泛型接口

泛型其主要目的是可以建立具有类型安全的集合框架,如链表、散列映射等数据结构 最重要的一个优点是:在使用这些泛型类建立数据结构时,不必进行强制类型转换,即运行时不进行类型检查,JDK1.5是支持泛型的编译器,它将运行时的类型检查提前到编译时执行,是代码更安全。 泛型类: 使用“class 名称&lt;泛型列表&gt;”声明一个类,这种声明类就称为泛型类 class ShowObject 上述Show...

Android_xi的博客 1770

在 SAP Fiori 中正确配置 Group 角色:从 PFCG 分配到首页呈现的完整链路

摘要:SAP Fiori项目中,用户登录后能否看到应用往往取决于角色配置而非前端开发。关键在于通过PFCG角色将launchpad designer中创建的tile group关联到用户角色。Catalog是应用池,group是用户首页可见的工作区。正确配置后,用户会看到角色对应的默认分组,同时保留个性化调整能力。项目实施中常见问题是应用开发完成但未正确配置group与角色关联,导致业务用户无法在首页看到应用入口。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 164

05GATK流程和找变异

05GATK流程和找变异 GATK 集合了一套功能全面的高通量测序数据基因组分析工具包,算是业界的权威,更新的速度非常快。需要注意的是,不同版本的 GATK 在工具应用上会有些许不同。这里我们使用是最新版本 GATK 4.1.4.1(截止2019年12月31日)。 数据准备 前面我们提到了,走GATK流程需要到官网下载很多数据库文件,比如下面这些: dbsnp_146.hg38.vcf.gz dbsnp_146.hg38.vcf.gz.tbi Mills_and_1000G_gold_standard.

qq_23435961的博客 1660

Java学习手册:Java集合、泛型面试问题

备注:部分内容从网上搜集而来,非原创 1、Java集合框架是什么?说出⼀些集合框架的优点? 每种编程语⾔中都有集合,最初的Java版本包含⼏种集合类:Vector、Stack、HashTable和Array。随着集合的⼴泛使⽤,Java1.2提出了囊括所有集合接⼝、实现和算法的集合框架。在保证线程安全的情况下使⽤泛型和并发集合类,Java已经经历了很久。它还包括在Java并发包中,阻塞接⼝以及它们...

浩比的专栏 1058

Cesium 场景特效之【全球海洋】GL2兼容版

Cesium 场景特效之【全球海洋】GL2兼容版

喜欢钻研前端和分享技术 1278

Java泛型详解

泛型(Generics)是Java 5引入的一个重要特性,它允许类、接口和方法操作未知类型的对象。通过使用泛型,我们可以编写更加通用、类型安全的代码,同时保持代码的简洁性和可读性。泛型本质上是一种"代码模板",它使用类型参数来表示类型,这些类型参数可以在实际使用时被实际的类型替换。这样,一份代码可以适用于多种不同的数据类型,而不需要为每种数据类型编写单独的实现。简单来说,泛型就是允许我们在定义类、接口和方法时使用类型参数(type parameters),这些类型参数稍后会被用来指定具体的类型(实际类型参数

yk_dflkg的博客 1427

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java 泛型 jdk_Java安全机制之泛型(JDK1.5)

泛型,类型安全机制。好处:1.将运行时期出现问题ClassCastException转移到了编译时期,方便解决问题,减少运行时期的问题,有利于程序的健壮性。2.避免了强制转换的麻烦泛型格式:ArrayList al = new ArrayList();若增加Integer类型的数据,在编译的时期就会提示错误。使用迭代器取值的时候,需要声明类型示例代码:import java.util.*;clas...

weixin_39683734的博客 152

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

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

Java中的泛型是什么?

Java泛型是一种强大的工具,它通过参数化类型的方式,使得代码更加灵活、类型安全,并且提高了代码的重用性和可读性。理解泛型的基本概念、优点、使用方式和限制,对于编写高质量的Java代码至关重要。在Java中,泛型方法的定义和调用是通过类型参数来实现的。泛型方法允许在方法级别上指定一个或多个类型参数,使得该方法可以在不同类型的上下文中重用,从而提升代码的复用性和类型安全性。定义泛型方法时,需要在方法声明中使用类型参数(例如T或E这些类型参数可以用于限制方法参数或返回值的类型。// 方法体在这个例子中,

破损的天堂鸟博客 1193

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【Day16】泛型:类型安全的集合与方法设计

哈喽,各位 Java 学习者!欢迎来到《Java 学习日记》的第十六篇内容~ 前面我们学习了集合框架的核心(List/Set/Map),但在使用过程中你可能会发现一个问题:如果不限制集合存储的元素类型,很容易出现类型转换异常。今天要攻克的泛型(Generic) 正是解决这个问题的核心技术 —— 它让代码具备 “类型参数化” 能力,既能保证类型安全,又能实现代码复用。本文会从泛型的核心概念、使用场景、通配符,到自定义泛型类 / 方法,帮你彻底掌握泛型的设计与使用!

maihuohuo的博客 1033

Java基础-7(包装类、集合、泛型)

Java基础-7(包装类、集合、泛型)1.包装类的装箱和拆箱2.集合3.泛型 1.包装类的装箱和拆箱 1.1 调用方法进行装箱拆箱 1.2 自动装箱与自动拆箱 1.3 基本类型与字符串类型之间的相互转换 2.集合 数组和集合的区别: 存储长度是否可变(数组不可变,集合可变) 存储的是数据类型(数组可存基本类型和对象,集合只可以存对象) 2.1 常用集合框架 2.2 Collection接口中的常用方法 2.3 Iterator接口(迭代器) 代码段示例: 2.4 增强for循环(专门被

weixin_46117619的博客 186

Java集合与泛型的理解

一、泛型的概念   泛型就是类型参数化,处理的数据类型不是固定的,而是可以作为参数传入.   泛型的由来:由于早期使用Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况 ,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患.所以泛型因此而诞生.   如下声明了一个Student类的集合,引用了泛型. List<Student> list = new Arra

Java后端技术栈 349

【解密泛型:让你的代码更安全、更高效】

本文主要介绍了一些泛型的基础知识,泛型的学习是非常重要的,以后我们在学习集合时候看源码等等都是很有用的。

TheMyth142857的博客 979
上一篇: List在使用迭代器遍历异常情况
下一篇: Java语言的基本介绍
惠溪崽崽
博客等级 码龄7年 4粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值