进入泛型的世界

news2024/11/24 16:36:55

泛型的理解和好处

泛型的好处

  • 编译时,检查添加元素的类型,提高了安全性
  • 减少了类型转换的次数,提高效率
    不使用泛型
    Dog-加入->Object-取出->Dog(向下转型) Dog放入到ArrayList 会先转成Object,在转出时,还需要转换成Dog
    使用泛型
    Dog->Dog->Dog 放入和取出时,不需要类型转换,提高效率
  • 不再提示编译警告

泛型的介绍

泛型:广泛类型

  • 泛型又称参数化类型,是JDK5.0 出现的新特性,解决数据类型的安全性问题
  • 在类声明或实例化时(在定义对象时,即编译期间),只要指定好需要的具体类型即可
  • Java 泛型可以保证如果程序在编译时,没有发出警告,运行时就不会产生,ClassCastException异常。同时,代码更加简洁
  • 泛型的作用:可以在类声明时通过一个标识表示类中某个属性的类型,或者某个方法的返回值类型,或者是参数类型
public class Generic01 {
    public static void main(String[] args) {
        //注意:E 具体的数据类型在定义Person对象时指定(即在编译期间),就确定E是什么类型
        Person<Integer> integerPerson = new Person<>(1);//E的数据类型是Integer
        integerPerson.show();
    }
}
//泛型的作用:可以在类声明时通过一个标识表示类中某个属性的类型、某个方法的返回值类型 或 参数类型
class Person<E>{
    E S;//E表示s的数据类型,该数据类型在定义Person对象的时候指定,即在编译期间,就确定E是什么类型

    public Person(E s) {//E也可以是参数类型
        S = s;
    }
    public E f(){//E也可以是返回类型
        return S;
    }
    public void show(){
        System.out.println("S的运行类型="+S.getClass());
    }
}

结果
在这里插入图片描述

泛型的语法

泛型的声明

  • interface 接口{} 和 class类<K,V>{}
    1,其中 T K V 不代表值,而是表示类型
    2,任意字母都可以,常用T表示,是Type的缩写

泛型的实例化

要在类名后面指定类型参数的值(类型)。如:

  • 1,List strList = new ArrayList();
  • 2,Iterator iterator = customers.iterator();

泛型使用实例

在这里插入图片描述

public class GenericExercise {
    public static void main(String[] args) {
        //使用泛型方式给HashSet放入三个学生对象,遍历时可以直接调用Student1中的方法
        Set<Student1> objects = new HashSet<Student1>();
        objects.add(new Student1("jack"));//当调用add方法时,显示调用Student1 对象
        objects.add(new Student1("tom"));
        objects.add(new Student1("smith"));

        // 遍历
        for(Student1 o:objects){
            System.out.println(o.getName());
        }
        //使用泛型方式给 HashMap 放入 3 个学生对象
        //K -> String V->Student
        //一旦添加了泛型,编译器就会规范调用类型
        Map<String, Student1> map = new HashMap<String, Student1>();
        //public class HashMap<K,V> {}

        Student1 student1 = new Student1("jack");
        Student1 student2 = new Student1("tom");
        Student1 student3 = new Student1("smith");
        map.put("jack",student1);
        map.put("tom",student2);
        map.put("smith",student3);

        //遍历
        //迭代器 EntrySet
        /*
        public Set<Map.Entry<K,V>> entrySet() {
            Set<Map.Entry<K,V>> es;
             return (es = entrySet) == null ? (entrySet = new EntrySet()) : es;
        }
        */
        //1,map.entrySet();
        Set<Map.Entry<String, Student1>> entries = map.entrySet();

        /*
        public final Iterator<Map.Entry<K,V>> iterator() {
                return new EntryIterator();
        }
        */
        //2,调迭代器 entries.iterator()
        Iterator<Map.Entry<String, Student1>> iterator = entries.iterator();
        //3,先判断hasNext  下一个是否还有
        while (iterator.hasNext()) {
            Map.Entry<String, Student1> next = iterator.next();
            System.out.println(next.getKey()+"-"+next.getValue());
        }
    }
}
class Student1{
    private String name;

    public Student1(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "Student1{" +
                "name='" + name + '\'' +
                '}';
    }
}

结果
在这里插入图片描述

泛型的注意事项

  • 1,interface List{} public class HashSet{}
    说明:T E 只能是引用类型
  • 2,在给泛型指定具体类型后,可以传入该类型或其子类类型
  • 3,泛型使用形式
    List list1 = new ArrayList ();
    List list1 = new ArrayList <>();
    如果我们这样写List list1 = new ArrayList (); 默认他的泛型是 E 就是Object
public class GenericDetail {
    public static void main(String[] args) {
        //1,泛型指向的数据类型是引用类型Integer,不能是基本数据类型int
        List<Integer> list = new ArrayList<Integer>();
        //List<int> list = new ArrayList<int>();  错误

        //2,E指定了A类型,构造器传入 new A()
        //  在给泛型指定具体类型后,可以传入该类型或者子类类型
        Pig<A> aPig = new Pig<A>(new A());
        aPig.f();
        Pig<A> aPig1 = new Pig<A>(new B());
        aPig1.f();

        //3,泛型的使用形式
        List<Integer> list1 = new ArrayList <Integer>();
        //实际开发中往往简写为:
        List<Integer> list2 = new ArrayList <>();

        //4,如果我们这样写List list1 = new ArrayList ();  默认他的泛型是 <E> E 就是Object
        List list3 = new ArrayList ();//等价 ArrayList<Object> arrayList = new ArrayList<Object>();
        
    }
}
class A{

}
class B extends A{}
class Pig<E>{
    E e;

    public Pig(E e) {
        this.e = e;
    }
    public void f(){
        System.out.println("Pig类中的f方法");
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1666701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据分享—中国土壤有机质数据

土壤有机质数据是进行区域土地资源评价&#xff0c;开展自然地理研究常使用的数据&#xff0c;本期推文主要分享全国土壤有机质数据集。梧桐君会不定期分享地理信息数据&#xff0c;欢迎大家长期订阅。 数据来源 “万物土中生”&#xff0c;小编今天要分享的中国土壤有机质数…

通过mvn archetype 创建一个spring boot start 工程

mvn archetype https://maven.apache.org/archetype/index.html 遇到的问题 对于想自定义一个spring-boot-start的同学,比如 Springboot自定义Starter启动器 整个过程很繁琐。 定义属性开关增加 spring boot test start插件定义自动装载 spring.factories or org.springfra…

安装Ununtu后常见问题(无法远程连接、root密码等)

安装Ununtu后常见问题&#xff08;无法远程连接、root密码、无法ifconfig等&#xff09; 提示&#xff1a;安装完Ununtu系统后会遇到一些常见的问题&#xff0c;本文一次洗解决 文章目录 安装Ununtu后常见问题&#xff08;无法远程连接、root密码、无法ifconfig等&#xff09;一…

【全开源】排队叫号系统基于FastAdmin+GatewayWorker(源码搭建/上线/运营/售后/维护更新)

一款基于FastAdminGatewayWorker开发的多项目多场景排队叫号系统&#xff0c;支持大屏幕投屏&#xff0c;语音播报叫号&#xff0c;可用于餐厅排队取餐、美甲店排队取号、排队领取、排队就诊、排队办理业务等诸多场景&#xff0c;助你轻松应对各种排队取号叫号场景。 功能简介…

全国招标信息招标原文查询接口

招标信息招标原文查询接口 避开会员 全国招标投标查询API是解析商机的数据之门&#xff0c;它提供了一个高效、实时且定制化的方式来获取和分析招标投标信息。无论您是一家小型企业还是一家大型企业&#xff0c;都可以受益于这一强大工具&#xff0c;加速商业决策&#xff0c;…

音视频-H264编码封装- MP4格式转Annex B格式

目录 1&#xff1a;H264语法结构回顾 2&#xff1a;H264编码补充介绍 3&#xff1a;MP4模式转Annex B模式输出到文件示例 1&#xff1a;H264语法结构回顾 在之前文章里介绍过H264的语法结构。 传送门: 视音频-H264 编码NALU语法结构简介 2&#xff1a;H264编码补充介绍 H…

内存操作数及寻址方式

debug命令 debug命令&#xff0c;即DOS实用程序。DEBUG是一个DOS实用程序&#xff0c;是供程序员使用的程序调试工具&#xff0c;可以用它检查内存中任何地方的字节以及修改任何地方的字节。它可以用于逐指令执行某个程序以验证程序运行的正确性&#xff0c;也可以追踪执行过程…

新iPadPro是怎样成为苹果史上最薄产品的|Meta发布AI广告工具全家桶| “碾碎一切”,苹果新广告片引争议|生成式AI,苹果倾巢出动

Remini走红背后&#xff1a;AI生图会是第一个超级应用吗&#xff1f;新iPadPro是怎样成为苹果史上最薄产品的生成式AI&#xff0c;苹果倾巢出动Meta发布AI广告工具全家桶&#xff0c;图像文本一键生成解放打工人苹果新iPadPro出货量或达500万台&#xff0c;成中尺寸OLED发展关键…

牛客NC404 最接近的K个元素【中等 二分查找+双指针 Java/Go/PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/b4d7edc45759453e9bc8ab71f0888e0f 知识点 二分查找&#xff1b;找到第一个大于等于x的数的位置idx;然后从idx开始往两边扩展Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、…

10分钟了解Golang泛型

泛型是Golang在1.18版本引入的强大工具&#xff0c;能够帮助我们在合适的场合实现简洁、可读、可维护的代码。原文: Go Generics: Everything You Need To Know 导言 可能有人会觉得Go泛型很难&#xff0c;因此想要借鉴其他语言&#xff08;比如Java、NodeJS&#xff09;的泛型…

timerfd加epoll封装定时器

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1、用timerfd加epoll封装定时器的优点2、代码实现 1、用timerfd加epoll封装定时器的优点 定时器为什么需要timerfd 在设计定时器时&#xff0c;我们首先想到的就是…

临近空间相关概念

临近空间概念 距地 20KM-100KM 的临近空间位于内外层空间之中&#xff0c;也称为 超高空、近空间、亚轨道等。 特点就是&#xff1a;纵跨 非电离层和电离层、空气稀薄&#xff0c;存在 臭氧、紫外、辐射等特殊环境 存在 重力波、行星波、大气放电等特殊现象。 临近空间高速飞…

YOLOv8+CLIP实现图文特征匹配

本文通过结合YOLOv8s的高效物体检测能力与CLIP的先进图像-文本匹配技术&#xff0c;展示了深度学习在处理和分析复杂多模态数据中的潜力。这种技术的应用不仅限于学术研究&#xff0c;还能广泛应用于工业、商业和日常技术产品中&#xff0c;以实现更智能的人机交互和信息处理。…

[BJDCTF2020]ZJCTF,不过如此 1

涉及&#xff1a;php的伪协议、preg_replace函数的漏洞和正则表达式的运用。 解题步骤 <?phperror_reporting(0); $text $_GET["text"]; $file $_GET["file"]; if(isset($text)&&(file_get_contents($text,r)"I have a dream"))…

璩静霸道言论引发百度风波随笔

从5月9日晚开始有关“百度副总裁璩静已从公司离职”的消息&#xff0c;仅两天时间就几乎布满互联网所有知名自媒体平台&#xff0c;可谓兹事体大&#xff0c;无异于互联网发生了一场八级地震&#xff0c;波及面之广&#xff0c;匪夷所思&#xff01; 百度截图 尽管笔者一直密切…

|Python新手小白中级教程|第二十八章:面向对象编程(类定义语法私有属性类的继承与多态)(4)

文章目录 前言一、类定义语法二、私有方法和私有属性1.私有属性2.私有方法 三、类“继承”1.初识继承2.使用super函数调用父类中构造的东西 四、类“多态”1.多态基础2.子类不同形态3.使用isinstance函数与多态结合判断类型 总结 前言 大家好&#xff0c;我是BoBo仔吖&#xf…

Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV

OpenCV是大型的Third party 计算机视觉库&#xff0c;在开发中会经常用到&#xff0c;本篇记录一下 在Ubuntu系统上安装和配置OpenCV&#xff0c;并使用C/C调用OpenCV 关于VS Code配置C/C开发环境的部分&#xff0c;见之前的博文 Linux/Ubuntu系统下使用VS Code配置C/C开发环境…

动态规划算法练习——计数问题

题目描述 给定两个整数 a 和 b&#xff0c;求 a 和 b 之间的所有数字中 0∼9 的出现次数。 例如&#xff0c;a1024&#xff0c;b1032&#xff0c;则 a 和 b 之间共有 9 个数如下&#xff1a; 1024 1025 1026 1027 1028 1029 1030 1031 1032 其中 0 出现 10 次&#xff0c;1 出现…

360度全景航拍生成原创,玩命增粉10W ,月入万余元【视频教学 配套设施专用工具】

抖音近期推出了一种全新的玩法&#xff0c;那就是360度全景航拍&#xff0c;这为原创者们带来了新的增粉机会&#xff0c;有望在一个月内收入过万。这个新玩法配有视频教学和专用工具。 项目 地 址 &#xff1a; laoa1.cn/1993.html 抖音的这个新功能&#xff0c;就是360度全…

南京观海微电子----开关电流与输入输出电流的关系

BOOST 结构的工作原理及波形 BOOST 结构简单原理图见图 1&#xff0c;工作时各点的电压电流波形见图 2。 不考虑上电时的情形&#xff0c;仅考虑稳定工作时&#xff0c;情况如下&#xff1a; 当开关管 Q 导通时&#xff08;开关管电压为 0&#xff09;&#xff0c;电感 L 相当…