Java中的泛型

Java中的泛型是什么?它有什么作用? 在类、接口或方法声明中使用的特殊类型变量,用于指定类或方法所操作的对象类型。:在泛型代码中,类型参数会在编译时进行检查,以确保类型的安全性。还允许你声明带有多个类型参数的泛型类、接口和方法,只需在尖括号中用逗号分隔多个类型参数即可。这些类型参数在实例化时会被具体的类型所替换,从而实现了代码的重用和类型安全。中的泛型是一个强大的工具,它允许你编写更加灵活、可重用、类型安全和易于阅读的代码。泛型方法是在方法声明时通过类型参数指定方法中操作的对象的类型。在方法体内部,你可以像使用普通类型一样使用类型参数。 阅读详情
Java中的泛型jdk1.5之后的一个重要的特性。
泛型:英文Generic
1.定义:泛型是 程序设计语言的一种特性。允许程序员在 强类型 程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。各种 程序设计语言和其 编译器、运行环境对泛型的支持均不一样。将类型参数化以达到代码复用提高软件开发工作效率的一种 数据类型。 泛型类是 引用类型,是 堆对象,主要是引入了类型参数这个概念
2.使用jak中的泛型
    (1) 声明一个ArrayList的容器对象可以使用泛型,用法是在类名后面加一对尖括号来指定具体的类型化参数
      ArrayList<String> arrl=   new  ArrayList<String>();
//这样就指明了在这个ArrayList的容器中只能装类型类型为String的对象
      arrl.add( "sjkfh" );
   arrl.add( 9 );//这里编译器就会报错,因为声明的参数化类型是String类型的对象,不能add整数类型的对象
     (2)泛型中的?通配符。使用?通配符就表明了这个泛型可以接受任何类型的参数,例如写一个方法它可以接受任何类型的参数,可以这样定义:

//体验泛型的?通配符,在泛型的尖括号中用问号来指定就不确定具体的类型是什么了,就可以统配任何类型了
      //使用?通配符可以使用其他任何参数化的类型,?通配符定义的变量主要用作引用,可以调用与参数化无关的方法,不可以调用与参数化有关的方法
      public   static   void   printColletion(Collection<?> collection){
         System.   out  .println(collection.size());
            for  (Object obj:collection){
             System.   out  .print(obj);
         }
    }
    (3 )?通配符的扩展:
            限定通配符的上边界,如:
                Vector<?  extends  Number> v1=   new  Vector<Number>();
               这里是声明了Vector的对象的泛型,它参数化类型是任意的,但限定了范围,这里表明了它的参数化类型只能是Number以及继承了Number的之类的类型
           限定通配符的下边界,如:
                Vector<?  super  Integer> v2=   new  Vector<Number>();
               同样的这里也定义了泛型的参数化类型,它的范围只能是Integer以及它的父类
3.自定义泛型。
(1)定义泛型的方法,要定义一个方法使它能作用于任何类型的参数可以这样写,在方法的返回值前面加上尖括号<E>如有返回值则应在泛型的后面指定同样的类型E
//定义一个方法 对传入的Object类型的对象转换成其他类型的对象
      private   static  <T> T autoConvert(Object obj){
            return  (T)obj;
    }
//定义一个方法,能打印出任意类型集合中的所有元素
      public   static  <T>  void  printColletion1(Collection<T> collection){
         System.   out  .println(collection.size());
            for  (Object obj:collection){
             System.   out  .print(obj);
         }
    }
(2)定义泛型类,定义泛型类只需要在类名的后面加上尖括号<E>可以了
public   class  GenicDao<E>
需要注意的是:在类中定义的方法的类型必须严格按照类的泛型来定义,同时还不能有static方法,因为在泛型类中 因为在泛型中只能指定了对象, 而静态的方法直接用类名来调用则会混淆。 如果你硬要定义静态方法则要在你定义的泛型方法中自定义泛型
public   static   <E>  void  updeta2(E e){
         
}
注意这里的E和类中的E是两个不同的概念哈!

4.在java中的泛型它只是给编译器看,在编译器编译变成字节码后,它的具体的参数化类型就没有区别了可以做这样的一个测试
ArrayList<String> arrl=   new  ArrayList<String>();
ArrayList<Integer> arr2=   new  ArrayList<Integer>();
System.  out .println(arrl.getClass() == arr2.getClass()); //output:true
从输出的结果为true可以看到这两份字节码是一样的,所以证明了泛型只是给编译器看,而编译过后则丢失了指定引用类型的区分。
另外一个泛型中的重要知识点:我们可以通过反射来透过编译器来获取泛型中的实际参数类型。 首先说明一下,我们想通过获得类的字节码来区分一个集合里到底装的是什么类型,这样是行不通的,因为在编译器编译过后出来的字节码已经去掉了实际的参数类型。
另外一种做法是写一个方法
           //定义一个方法对泛型中具体的参数类型进行操作
      public   static   void   applyGenic(Vector<Date> v1){
         
    }
定义这个方法之后,我没有办法通过v1来获得前面这个变量的类型,但是我们可以通过这个方法来知道他的参数列表的类型
Method applyMethod=GenicTest.  class .getMethod(   "applyGenic"   , Vector. class   );
Type[] types=applyMethod.getGenericParameterTypes(); //这里指得到参数的泛型,返回的是一个Type[]数组
ParameterizedType pType=(ParameterizedType)types[0]; //ParameterizedType是Type下面的子类,是参数化类型
System.   out  .println(pType.getRawType()); //getRawType()这里获得是原始的类型
System.   out  .println(pType.getActualTypeArguments()[0]);  //getActualTypeArguments()[0]获得的实际的参数类型
4.小应用案例:
/*对java泛型的综合应用案例:
1.利用HashMap指定一个参数化类型的变量用来存储集合数据HashMap<k,v>指定一个key和value,key和value是一一对应的,现在的问题是要利用迭代来取出其中的key和value
2.由于Map没有实现 Iterable<E> 接口所以不能进行迭代,而Set实现了 Iterable<E> 接口可以进行迭代
3.所以现在思考的问题就是要将HashMap转换为Set,则利用到HashMap中的一个方法entrySet(),返回值是Set,而这里要注意的是Set的类型化参数也是一个泛型
         */
HashMap<String, Integer> maps =  new  HashMap<String, Integer>();
maps.put(   "djkf"  , 33);
maps.put(   "sdfh"  , 25);
maps.put(   "sdkjf"  , 78);
         
Set<Map.Entry<String, Integer>> entrySet = maps.entrySet();
for  (Map.Entry<String, Integer> entry:entrySet){ //这里要注意对于迭代出来的类型是Map.Entry<String, Integer>,因为Set里面装的就是Map.Entry<String, Integer>
System.   out  .println(entry.getKey() +  ":"   + entry.getValue());
}
         
【泛型】Java中的泛型,泛型类,泛型接口,泛型方法,泛型擦除 这篇文章总结一下Java中的泛型相关知识点,包括:泛型概念、泛型优缺点、泛型通配符、泛型上下界、泛型使用(泛型类、泛型接口、泛型方法)、泛型擦除等内容。 一、泛型概念 (1)什么是泛型 什么是泛型??? 泛型(Generic),是一种参数化数据类型,它允许我们在编写程序代码的时候不用具体指定需要什么数据类型,而是等到具体使用的时候,将数据类型以参数的形式传递给程序,这就是泛型程序设计。 (2)为什么需要泛型 我们来看看下面这个栗子 假设现在有个需求,通过集合保存元素,需要保存String字 阅读详情

相关推荐

本届挑战赛亚军方案:基于大模型和多AGENT协同的运维

我们分别构建了异常检测基础模型,一旦系统接受到异常即会通知LLM主管Agent,主管Agent对异常问题进行决策与子领域Agent进行桥接,多个子领域Agent协同工作,实现运维故障自动诊断和多个任务模型的编排,提升运维效率。

weixin_52705010的博客 2295

【Java核心】Java泛型(Generic Type)

一、写在前面。 错误可分为两种:编译时错误与运行时错误。编译时错误在编译时可以发现并排除,而运行时错误具有很大的不确定性,在程序运行时才能发现,造成的后果可能是灾难性的。 泛型的引入使得一部分错误可以提前到编译时期发现,极大地增强了代码的健壮性。但是我们知道 java 泛型在运行的时候是会进行泛型擦除的,那我们要怎样得到在编译时期泛型的信息呢?Java 为我们提供了 Type 接口,使用它,我们可以得到这些信息。 类型擦除是指泛型在运行的时候会去除泛型的类型信息。java 中,泛型主要是在编译层次来实现的,

明天,争取的博客 5240

从零到一:EHB-电机复合制动系统的Simulink仿真实战指南

本文详细介绍了EHB-电机复合制动系统在纯电动汽车中的Simulink仿真实战指南。通过系统概述、建模核心模块解析、控制策略开发及典型问题排查,帮助读者掌握从零到一的开发流程。重点讲解了液压子系统建模、电机再生制动模型及整车动力学集成,为开发者提供了一套完整的解决方案。

hh234的博客 1009

java中的泛型(二)——泛型接口以及泛型方法

本文简要介绍了泛型接口以及泛型方法的使用

qq_59750520的博客 4701

手把手教你复现IEEE 2025高光谱图像盲超分算法DBSR(附开源代码与避坑指南)

本文详细介绍了如何从零复现IEEE 2025高光谱图像盲超分算法DBSR,包括环境配置、数据预处理、核心模块解析、训练策略及常见问题解决方案。特别针对开源代码中的关键步骤和潜在问题提供了实用指南,帮助研究者和开发者高效实现Deep blind super-resolution技术,适用于遥感、医疗等领域的图像增强应用。

weixin_42524708的博客 414

AI赋能工业自动化:传感器大数据实战

工业自动化中AI与传感器大数据的结合,显著提升了生产效率与可靠性。关键技术包括实时数据处理、边缘计算和数字孪生,未来将进一步向自主决策系统演进。

AFAGA_x的博客 416

详解Java中的泛型(泛型的语法,擦除机制,泛型的上界)

泛型(Generics)是Java SE 5中引入的一个新特性,可以使Java中的类和方法具有更广泛的类型范围。通俗的说,它使得我们可以在定义类和方法时指定一个或多个类型参数,从而可以在不考虑具体类型的情况下,代码中直接使用这些类型参数。泛型可以增强代码的安全性、可读性和可重用性。例如,可以使用泛型实现容器类(如ArrayList、HashMap)等。在使用泛型时,需要在编写代码时指定泛型类型,这样可以在编译期间检查代码的类型安全性。

luming的博客 6358

从零开始掌握OBD-II:汽车诊断开发的核心技术与实战解析

本文深入解析OBD-II汽车诊断系统的核心技术,包括ECU通信协议、故障码解析及诊断工具开发实战。通过详细的协议分析和代码示例,帮助开发者快速掌握汽车诊断开发技能,实现从零到精通的进阶。特别适合从事汽车电子开发和OBD检测的技术人员参考学习。

weixin_42528780的博客 440

[JAVA]什么是泛型?泛型在Java中的应用

所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型

2301_79757798的博客 1613

基于PyTorch的BP神经网络PID控制器动态调参实战

本文详细介绍了基于PyTorch的BP神经网络PID控制器动态调参实战,结合BP神经网络的自适应能力和PID控制算法的经典优势,实现工业控制中的高效参数调整。通过PyTorch实现BP-PID融合架构,包括网络设计、损失函数优化及动态调参技巧,显著提升控制性能,适用于温度控制、电机控制等场景。

weixin_29094775的博客 523

zabbix6.0.4拓扑图链路显示流量

1. 背景介绍 网络流量监控是网络管理员必备功课,以前研究cacti的weathermap插件,网络流量大小和拥塞情况一清二楚,随着cacti的没落,weathermap插件也不能再继续使用,此时就需要学习了解新的替代方案。 经过研究和实际测试,发现zabbix的拓扑图有这个功能。 以下验证了zabbix的拓扑图显示线路流量的功能。 2. Zabbix 6显示拓扑图流量过程 选择监测-拓扑图 点进Local ne...

u013930899的博客 8486

【Java 基础语法】详解 Java 中的泛型

前言: 泛型的知识其实在前面 Java 的泛型和包装类 这章介绍过了一些,但那些知识是为后面介绍 Java 集合框架做的铺垫,而今天这章再配合之前那章,将会完整的介绍 Java 中的泛型! 文章目录1. 前章回顾1.1 泛型类的代码示例1.2 泛型类的意义1.3 泛型是如何编译的2. 泛型类的定义2.1 语法2.2 示例3. 内部类3.1 概念3.2 实例内部类3.3 静态内部类3.4 匿名内部类4. 泛型类的使用4.1 语法4.2 示例4.3 类型推导(Type Inference)5. 裸类型(Ra

吞吞吐吐大魔王的博客 3460

5.3-集群电源模式解析

DSU-120 DynamIQ™集群支持9种电源模式,包括正常运行(ON)、完全断电(OFF)、三种数据保持模式(FUNC_RET、FULL_RET、MEM_RET)、两种调试模拟模式(OFF_EMU、MEM_RET_EMU),以及系统恢复模式(WARM_RST、DBG_RECOV)。这些模式通过智能管理电源状态,在保持数据完整性的同时实现功耗优化,并为系统调试和故障恢复提供支持。不同模式在RAM保持、逻辑断电和调试能力方面各有侧重,满足从正常运行到深度调试等不同场景需求。

baron-周贺贺-代码改变世界ctw 117

java中的泛型是什么_Java中泛型是什么?Java泛型的详细介绍

本篇文章给大家带来的内容是关于Java中泛型是什么?Java泛型的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。一、什么是泛型?Java泛型设计原则:只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常.泛型:把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型参数化类型:ArrayList中的E称为类型参数变量Arra...

weixin_29174013的博客 3474

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java中的泛型详解

泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。泛型方法是Java中一种特殊的方法,它在声明时可以使用泛型类型参数,使得方法在调用时可以接受不同类型的参数,并且能够保证类型安全。需要注意的是,泛型在Java中是通过类型擦除来实现的,这意味着泛型信息只在编译时存在,而在运行时会被擦除。在Java中,泛型是一种强大的编程特性,允许类、接口和方法在定义时声明一种参数化类型,而在使用时可以指定具体的类型参数。在编译时,泛型类型被擦除,实际操作的对象是原始类型。

努力分享一些干货 1599

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

JAVA中的泛型

泛型:就是适用于许多许多类型。从代码上讲,就是对类型实现了参数化。 泛型的语法: class 泛型类名称 { } class ClassName { } 类名后的 代表占位符,表示当前类是一个泛型类。 类型形参一般使用一个大写字母表示,常用的名称有: E 表示 Element K 表示 Key V 表示 Value N 表示 Number T 表示 Type S, U, V 等等 - 第二、第三、第四个类型

2302_76339343的博客 1487

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

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

Java 中的泛型详解

泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参列表,普通方法的形参列表中,每个形参的数据类型是确定的,而变量是一个参数。在调用普通方法时需要传入对应形参数据类型的变量(实参),若传入的实参与形参定义的数据类型不匹配,则会报错。那参数化类型是什么?以方法的定义为例,在方法定义时,将方法签名中的形参的数据类型也设置为参数(也可称之为类型参数),在调用该方法时再从外部传入一个具体的数据类型和变量。

XuChaofafa的博客 1704

【Java】Java中的泛型

在Java中,泛型是一种在编译时期类型检查的机制,它使得我们能够创建具有通用行为的类、接口和方法,以适应不同类型的数据。通过使用泛型,可以提高代码的复用性、类型安全性以及可读性。 泛型是在JDK 1.5 引入的新语法,通俗来讲,泛型就是适应多种类型。从代码上来看,就是对类型实现了参数化,即从传入的类型参数来确定数据的具体类型。

qq_61635026的博客 2430

Java中的泛型是什么?

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

破损的天堂鸟博客 1194

JAVA中的泛型,以及什么时候使用泛型

泛型: jdk1.5出现的安全机制. 好处: 1.将运行时期的问题ClassCastException转到编译时期. 2.避免了强制类转换的麻烦 不是泛型的例子: import java.util.ArrayList; public class Demo { public static void main(String[] args) { ArrayList ...

weixin_42947972的博客 5027

什么是Java中的泛型?

在泛型出现之前,如果要对不同类型的数据执行相同的操作,必须为每一种类型编写一个单独的方法。泛型是Java SE 1.5之后的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。Java泛型提供了类型通配符的概念,用于创建更为灵活和可重用的泛型代码。类型通配符在方法签名、类、接口或字段的类型中使用,以表示未知的类型参数。方法被定义为一个泛型方法,可以接受任何类型的数组,并在控制台上打印出数组的元素。

Songxianshengbei的博客 989
下一篇: java中的反射
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Seven的代码实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值