java知识点之泛型

Java小知识点——泛型 在类名后添加类型参数(如。 阅读详情

1.泛型概述

泛型:JDK1.5以后出现的新特性,用于解决安全问题,是一个类型安全机制

优点:

1.将运行时期可能抛出的异常ClassCastException(),转移到编译时期,方便程序员解决问题。让运行期间的问题减少,且程序更加安全

2.避免使用时对象强制类型转换的麻烦

2.泛型使用

泛型格式:通过<>来定义要操作的引用数据类型

在使用java提供的对象时, 什么时候写泛型?

1.通常在集合框架中很常见,只要见到有<>出现就要定义泛型。当使用集合时,将集合中需要存储的数据类型作为参数传递到<>即可。
2.<>用于接收泛型的具体类型,且只能是引用数据类型,因此基本数据类型需要传入其包装类(例:int–>Integer)。

示例代码:

        //创建List集合子类ArrayList对象
        ArrayList<String> al=new ArrayList<String>();

说明:以上代码的作用即创建一个用于装载String类型数据的ArrayList对象,<>中传入的是需要装载的数据类型。


3.泛型类

什么时候定义泛型类?
当类中要操作的引用数据类型不确定的时候,可以定义泛型来完成扩展

格式:

public class GenericDemo<T>{}

示例代码:

public class GenericDemo<T>{
    //利用泛型定义成员变量的数据类型
    private T input;
    //包含泛型的构造方法
    public GenericDemo(T input){
        this.input=input;
    }
}

说明:以上代码就定义了一个简单的泛型类。利用泛型定义成员变量以及构造方法参数的类型,只需要在使用时指明具体数据类型即可。 这就使得这个类具有了较好的拓展性。


4.泛型方法

当方法的参数为泛型时,该方法就成为了一个泛型方法

格式:

public <Q> void setItem(Q q){}

说明:

1.泛型类定义的泛型,是在整个类中都有效的。如果这个泛型被类中方法使用,那么在泛型类的对象明确要操作的具体类型后,所有使用了这个泛型的方法的数据类型就也同时确定了。

2.为了让同一方法可以操作不同的数据类型,且类型不确定,则可以将泛型定义在方法上,且该泛型仅在这个方法中有效

3.可以同时在类和方法上定义泛型
例:public <Q> void show(T t){}
注:T是泛型类定义的泛型,Q是在方法中定义的泛型

示例代码:

    //泛型方法
    public <Q> void setItem(Q q){
        System.out.println("设置值:"+q);
    }

说明:定义泛型方法只需要将泛型符号写在方法的返回值类型前即可。

5.静态泛型方法

静态方法不可以访问类上定义的泛型。如果静态方法操作的数据类型不确定,就只能将泛型定义在该方法上。静态泛型方法的定义方式与泛型方法的使用方式相似。

格式:

public static <W> void show(W w){}


6.泛型接口

泛型除了可以用来定义类,还可以用来定义接口

格式:

interface GenericImp<T>{}

示例代码:

//部分代码

//泛型接口
interface GenericImp<T>{
    public void show(T t);
}

//使用泛型接口
class GenericClaByImp implements GenericImp<String>{

    //实现抽象方法
    public void show(String t) {        
        System.out.println(t);
    }

}

说明:当自定义类使用泛型接口时,指明接口泛型的具体数据类型即可。


7.泛型限定

1.使用通配符

使用泛型时,若不确定泛型的具体数据类型,则可以使用通配符<?>的方式

示例代码:

import java.util.ArrayList;
import java.util.Iterator;

public class GenericLimitDemo {

    //自定义通用输出元素的方法
    public void printElement(ArrayList<?> al){
        Iterator<?> it=al.iterator();
        while(it.hasNext()){
            System.out.println("元素--"+it.next());
        }
    }

    public static void main(String[] args) {
        //新建存储数字的ArrayList对象
        ArrayList<Integer> intergerArray=new ArrayList<Integer>();
        intergerArray.add(5);//int自动装箱
        intergerArray.add(4);
        intergerArray.add(15);
        intergerArray.add(12);

        //新建存储字符串的ArrayList对象
        ArrayList<String> stringArray=new ArrayList<String>();
        stringArray.add("demoElement1");
        stringArray.add("demoElement2");
        stringArray.add("demoElement3");
        stringArray.add("demoElement4");
        stringArray.add("demoElement5");

        //实例化测试类对象
        GenericLimitDemo gld=new GenericLimitDemo();
        //调用同一方法对不同数据类型的集合进行元素输出
        gld.printElement(intergerArray);
        gld.printElement(stringArray);
    }

}

说明:从代码中可以看到,定义的通用输出方法printElement()事先并不确定参数的数据类型通配符,因此可以使用通配符<?>代替参数集合的参数部分。<?>也相当于直接不指定泛型,即输出方法可以改为’printELement(ArrayList al)’这是java为了向下兼容,但是这样做并不严谨。

也可以用定义泛型方法的方式代替这种通配符操作

示例代码:

    //部分代码
    //使用泛型方法自定义通用输出元素的方法
    public <T> void printElement(ArrayList<T> al){
        Iterator<T> it=al.iterator();
        while(it.hasNext()){
            System.out.println("元素--"+it.next());
        }
    }

1.泛型的限定

场景引入1:

    //说明:Dog extends Animal
    ArrayList<Animal> al=new ArrayList<Dog>();

说明:使用集合框架时,必须保证在实例化对象时等号两侧的泛型数据类型一致。即使两侧的具体泛型类型具有继承关系也不允许。

场景引入2:

    //说明:Dog extends Animal
    //定义取出元素的方法
    public static void print(ArrayList<Animal> al){
        //省略具体代码
    }

    public static void main(String[] args){
        ArrayList<Dog> al=new ArrayList<Dog>();
        //调用输出方法输出装有Dog的ArrayList对象
        print(al);
    }

说明:以上代码定义了一个输出Animal集合对象的方法,在调用时却传入Animal的子类对象Dog,这样的操作会使程序报错。

解决方法:

<? extends E>:可以接收E类型或者E类型的子类型。即限定泛型上限。

<? super E>:可以接受E类型或者E的父类型。即限定泛型下限。

说明: 限定泛型参数的上限或下限即为泛型的参数提供了一个接收类型的范围

示例代码:

    //说明:Dog extends Animal
    //定义取出元素的方法
    public static void print(ArrayList<? extends Animal> al){
        Iterator<? extends Animal> it=al.iterator();
        while(it.hasNext()){
            //省略具体操作代码
        }
    }

    public static void main(String[] args){
        ArrayList<Dog> al=new ArrayList<Dog>();
        //调用输出方法输出装有Dog的ArrayList对象
        print(al);
    }

说明:以上代码段利用定义泛型上限的方式,使得print方法可以接受Animal对象或者其子类对象作为参数。因此,这里便体现了泛型限定对方法的拓展。

CAD制图 CAD制图可以提高设计效率和准确性,并方便文档的存档和交流,是现代工程设计中不可或缺的一部分。·CAD三维开发是指使用计算机程序和工具来创建、编辑和操作三维模型、图形和设计的过程。它在工程、建筑、制造和游戏等领域广泛应用。CAD三维开发可能涉及到复杂的图形算法、性能优化、并行计算等方面的内容,因此需要深入学习和实践,以提高开发的效率和质量。 阅读详情

相关推荐

mtk-drm commit送显流程(二):内核态atomic_commit实现解析

本文深入解析了mtk-drm框架中atomic_commit机制的内核态实现流程,详细介绍了从用户态触发到硬件提交的完整调用链,包括状态检查、硬件提交等关键阶段。特别分析了MTK平台在动态刷新率、内存带宽优化等方面的特有实现策略,为开发者提供了调试技巧和常见问题解决方案。

weixin_30839881的博客 1308

【java】25:泛型

2)减少了类型转换的次数,提高效率[说明]√不使用泛型Dog-加入-> Object-取出-> Dog/放入到ArrayList会先转成Object,在取出时,还需要转换成Dog√使用泛型Dog->Dog->Dog//放入时,和取出时,不需要类型转换,提高效率。4)泛型的作用是:可以在类声明时通过一个标识表示类中某个属性的类型,或者是某个方法的返回值的类型,或者是参数类型。默认给它的泛型是[<E>E就是Object]即。List<int> list2= new ArrayList<int>()://错误。

2301_76936713的博客 800

SAP BAPI调用避坑指南:处理MD61/MD62计划独立需求时,这些参数和返回值你必须检查

本文详细解析了SAP BAPI调用中处理MD61/MD62计划独立需求的关键参数和返回值检查要点,包括版本控制、日期类型和删除标记等核心参数设置,以及常见错误排查和高级调试技巧,帮助开发者高效管理需求计划数据。

weixin_30316097的博客 613

JAVA之泛型

JAVA泛型概述和基本使用 一、概述 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。 在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显...

qq_40298054的博客 302

ERA5气象数据下载与解压全攻略:Python脚本一键搞定(附错误处理技巧)

本文提供了一套完整的ERA5气象数据自动化处理方案,涵盖从CDS API配置、智能批量下载到高效解压与数据验证的全流程。重点介绍了如何通过Python脚本实现一键式数据下载与批量解压,并分享了实用的错误处理技巧与性能优化策略,帮助科研人员高效获取和处理大规模气象数据。

k8l9m0n的博客 340

QML从入门到实战 - 完整学习路线

想入门 QML 开发?来 “从零开始学 QML” 专栏,海量源码 + 实战案例 + 大型项目拆解,手把手教你搞定跨平台 UI 设计,小白也能轻松掌握!

BenBierBa的博客 3508

高新技术<四>---> 泛型

--------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! --------------- 第一  泛型概述 一、概述: 1、泛型是在JDK1.5出现的新特性。泛型是用于解决安全问题的,是一个安全机制。 2、JDK1.5的集合类希望在定义集合时,明确表明你要向集合中装入那种类型的数据,无法加入指定类型以外的数据。

yangxin_540的专栏 998

基于Simulink进行双向DC-DC变换器的仿真建模

特点双向性:可以将能量从一个电压等级转换到另一个,且方向可逆。效率高:通过合理的控制策略减少能量损失。应用广泛:如电池管理系统、混合动力汽车等。挑战拓扑选择:根据应用场景选择合适的电路结构(如buck-boost、full-bridge等)。控制策略:确保高效稳定运行的同时,适应负载变化。热管理:有效散热以保持长期可靠性。首先明确要模拟的任务内容。设计一个能够支持双向能量传输的变换器。根据输入输出电压要求确定合适的变换器拓扑。实现有效的控制策略来维持输出电压稳定。

xiaoheshang_123的博客 367

Java知识点总结

Java知识点总结 一、Java基础 1、Java简介 Java是Sun公司1995年推出的Java面向对象程序设计语言和Java平台的总称。 Java分为三个体系:JavaSE(标准版)、JavaEE(企业版)、JavaME(微型版) 2...

Coding&Sharing 844

【乐企文件生成工程】乐企文件生成支持所有特定要素类型发票

【代码】【乐企文件】乐企文件生成最新更新!!!

九七的博客 851

融合双主干网络提升YOLOv8性能一种基于SOTA思想的目标检测改进

YOLOv8采用了单一的主干网络进行特征提取,通常是基于CSPDarknet作为骨干网络,在目标检测过程中通过不同的卷积层提取不同尺度的信息。虽然这种设计在大多数应用场景下表现出色,但在面对复杂背景、细节丰富的物体或小物体检测时,YOLOv8有时难以保持良好的精度。在本文中,我们提出了一种基于双主干网络的YOLOv8改进方案,通过结合先进的SOTA思想,全面提升了YOLOv8在目标检测任务中的表现。双主干网络架构。

博客 1154

java:集合框架(泛型方法的概述和使用)

* A:泛型方法概述     * 把泛型定义在方法上 * B:定义格式         * public &lt;泛型类型&gt; 返回类型 方法名(泛型类型 变量名) * C:案例演示     * 泛型方法的使用 声明泛型方法: public class Tool&lt;Q&gt; { private Q q; public Q getObj() { return q; } publi...

Y.z-努力才有成功的机会... 223

ADRC自抗扰算法优化(PLC梯形图篇)

ADRC自抗扰算法PLC梯形图完整源代码请参看下面博客文章:ADRC自抗扰控制算法(含梯形图完整源代码和算法公式)_adrc算法_RXXW_Dor的博客-优快云博客PLC的自抗扰控制(ADRC)算法_RXXW_Dor的博客-优快云博客_adrc算法1、自抗扰控制算法,网上很多文章有所讲解,大家也可以关注韩京清教授的论文和书籍,这里就不赘述了,下面给出梯形图+SCL代码。

RXXW_Dor的博客 2284

java泛型的知识点,全程干货。

在不使用泛型的情况下,我们可以使用Object类型来实现任意的参数类型,但是在使用时需要我们强制进行类型转换。泛型的本质就是“数据类型的参数化”,处理的数据类型不是固定的,而是可以作为参数传入。泛型主要用于编译阶段,编译后生成的字节码class文件不包含泛型中的类型信息,涉及类型转换仍然是普通的强制类型转换。静态方法中使用泛型时有一种情况需要注意一下,那就是静态方法无法访问类上定义的泛型,所以必须要将泛型定义在方法上。是在类实例化时确定的,而静态方法不依赖于类的实例,因此无法在静态方法中使用泛型参数。

m0_74255413的博客 983

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

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

【Java基础】泛型相关知识点总结

泛型,其实算是Java当中经常使用且比较难的语法了,很多人一开始都很难理解,下面,我将会用简单的方式带你去理解它,让你打好基础,以后不必再害怕~ Java之泛型泛型的定义为什么要用到泛型三级目录 泛型的定义 这里大家可以不必去看网上的有些定义,因为相对于比较学术化,只需记住泛型可以在程序设计中指定某种类型,让程序的设计更加规范化即可 为什么要用到泛型 了解到了泛型是什么后,那我们来讨论讨论为什么要用泛型这个语法,这个语法到底是干什么的?别急,下面,我先给大家举一个例子: class Stack { .

沐北的博客 2168

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

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

java map 泛型 反射_Java知识点总结(反射-反射操作泛型)

Java知识点总结(反射-反射操作泛型)@(Java知识点总结)[Java, 反射]Java采用泛型擦除的机制来引入泛型。Java中的泛型仅仅是给编译器javac使用的, 确保数据的安全性和免去强制类型转换的麻烦 。但是,__一旦编译完成,所有的和泛型有关的类型全部擦除__。为了通过反射操作这些类型以迎合实际开发的需要,Java就新增了ParameterizedType,GenericArrayT...

weixin_32521765的博客 152

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Java泛型核心知识点+实战代码

Java泛型核心知识点摘要 本文全面解析Java泛型特性,从基础概念到高级应用。泛型作为编译期类型安全机制,解决了传统集合的类型转换问题。主要内容包括: 泛型基础:参数化类型概念、编译期校验机制、类型安全优势,通过ArrayList示例对比泛型前后代码差异。 泛型类/接口:定义语法、使用方式及注意事项,包含完整代码案例。重点讲解继承规则:子类作为泛型类需保持标识一致,非泛型类需明确父类具体类型。 泛型方法:与泛型类解耦,方法级别定义类型参数,调用时指定类型,提高灵活性。 全文提供可直接运行的代码示例,涵盖类

XXJ0817的博客 719

java容器、泛型及一些知识点的回顾

记录一些自己在学习中认识不够清晰的知识点,方便自己回顾 包括:集合、关键字Static、this和构造器等

weixin_44773824的博客 210

java泛型知识点全面总结----

不罗嗦,先看代码,在总结,比现总结在看代码似乎要好一点–毕竟实践出真知 看代码---- package baozhuang; class Person <E>{//泛型类 String name; int age; E grade; public Person(String name, int age,E grade) { this.name = name; this.age = age; this.gra..

Gavin 274

Java泛型知识点总结

泛型知识点总结

wodongx123的博客 696

Java泛型知识点

一、什么是泛型 泛型就是参数化类型,即我们在定义的时候,将具体的类型进行参数化,在调用或者使用的时候,再传入具体的参数类型,我们可以将泛型用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。 二、为什么要使用泛型 泛型在开发过程中经常出现,比如我们一直高频使用的List集合,我们可以这么创建一个 ArrayList 集合。 List<String> stringL...

Evan的博客 482

java泛型知识点总结

1.泛型的基本应用 泛型可以解决数据类型的安全性问题,其主要原理是在类声明时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。 这样在类声明或者实例化时只要指定好需要的类型即可。 [访问权限] class 类名称 { [访问权限] 泛型类型标识 变量名称; [访问权限] 泛型类型标识 方法名称(){}; [访问权限] 返回值类型声明 方法名称 (){泛型类型标识 变量

Re_Saber的博客 882

JAVA泛型知识点总结

1.泛型的目的 泛型实现了将类型参数化的能力,使代码可以应用于多种类型。从jdk1.5开始,java允许定义泛型类、泛型接口和泛型方法。 2.泛型的优点 使用泛型的主要优点是能够在编译时而不是在运行时检测出程序中的类型转换错误,从而使程序具有一种类型安全的能力。 举个例子: public class ArrayList{ public Object get...

kawhi的博客 327

什么是泛型?Java基础之泛型详细知识点总结

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。 泛型定义格式: :指定一种类型格式。这里的类型可以是形参 :指定多种类型的格式,多种类型之间的用逗号隔开。这里的类型可以看成是形参 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

鱼干的博客 1218

Java 泛型知识点

泛型的语法核心是 “类型参数”,通常用大写字母表示(如T、E、K、V等,遵循约定俗成的命名:T=Type,E=Element,K=Key,V=Value)。根据使用场景,泛型可分为泛型类泛型方法和泛型接口三类。

weixin_37813118的博客 855
上一篇: Java基础之集合框架系列(三)
下一篇: Java基础之集合框架系列(四)
CodingEnding
博客等级 码龄11年 86粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值