【JavaSE】- 5min拿下泛型!

news2024/11/8 14:19:17

泛型

    • 1.1 泛型的定义
    • 1.2 泛型细节
    • 2.1 泛型类
    • 2.2 泛型方法
    • 2.3 泛型接口
    • 2.4 泛型的通配符

1.1 泛型的定义

  • 泛型的介绍

提供了编译时类型安全检测机制

  • 泛型的好处

    1. 把运行时期的问题提前到了编译期间
    2. 避免了强制类型转换,造成了代码的不优雅
  • 泛型的定义格式

    • <类型>: 指定一种类型的格式.尖括号里面可以任意书写,一般只写一个字母.例如:
    • <类型1,类型2…>: 指定多种类型的格式,多种类型之间用逗号隔开.例如: <E,T> <K,V>
public class Generics01 {
    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();
        arrayList.add(123);
        arrayList.add("abc");
        
        Iterator iterator = arrayList.iterator();
        while (iterator.hasNext()) {
            Object next = iterator.next();
            // 多态的弊端就是不能调用子类的特有方法
            String str = (String)next;
            System.out.println(str.length());
        }
    }
}

在这里插入图片描述
可以看到,我们在集合中可以添加不同类型的元素,但是如果想调用其中一个元素的特有的方法则需要强转,但是这个方法在123这个元素中没有呀,这时,泛型的作用就体现出来了!

        ArrayList<String> arrayList = new ArrayList<>();
        //arrayList.add(123); // err 
        arrayList.add("abc");

        Iterator<String> iterator = arrayList.iterator();
        while (iterator.hasNext()) {
            String next = iterator.next();
            // 多态的弊端就是不能调用子类的特有方法
            System.out.println(next.length());
        }

但是需要注意, arrayList.add(123); 是添加不进去的,因为指定了泛型的类型是String,所以只能在集合中添加String类型的元素

1.2 泛型细节

1.泛型中不能写基本数据类型
2.指定泛型的数据类型后,可以传入该类型的子类型和本身
3.如果不写泛型,默认为Object类型

1.可以看到集合中是不能存放基本数据类型的,所以可以存放引用数据类型

在这里插入图片描述

2.可以看到当前add方法添加的数据类型为Integer

在这里插入图片描述

        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);

3.这里Tiger是Animal的子类,可以看到,子类是可以传入的

        ArrayList<Animal> animals = new ArrayList<>();
        animals.add(new Animal("人",16));
        animals.add(new Tiger("赔钱虎",20));

这里上下两种写法都是一样的,不指定泛型就默认为object类型

        ArrayList<Object>  list1 = new ArrayList<>(); 
        ArrayList list2 = new ArrayList(); 

2.1 泛型类

在这里插入图片描述

运行结果

在这里插入图片描述

2.2 泛型方法

在这里插入图片描述

2.3 泛型接口

List<String>是一个泛型接口,表示该接口可以操作的元素类型是String
在这里插入图片描述
在这里插入图片描述

2.4 泛型的通配符

泛型不具备继承性,但集合中的数据具备

public class generics01 {
    public static void main(String[] args) {
        ArrayList<Father> fathers = new ArrayList<>();
        ArrayList<Son> sons = new ArrayList<>();

        fathers.add(new Father()); // ok
        fathers.add(new Son()); // ok

        m(fathers);
        //m(sons); //err 
    }

   
    public static void m(ArrayList<Father> arrayList) {

    }
}

class Father {

}

class Son extends Father{

}

在m方法中,传递过来的参数只能是 ArrayList<Father> 不能是子类

  < ? extends GrandFather> 代表只能传递GrandFather类及其子类
  < ? super Father>        代表只能传递Father类及其父类
public class generics02 {
    public static void main(String[] args) {

        ArrayList<GrandFather> grandFathers = new ArrayList<>();
        ArrayList<Father> fathers = new ArrayList<>();
        ArrayList<Son> sons = new ArrayList<>();
     
        m1(grandFathers);
        m1(fathers);
        m1(sons);

        m2(grandFathers);
        m2(fathers);
        // m2(sons);  // error
    }

    /*
        < ? extends GrandFather> 代表只能传递GrandFather类及其子类
        <? super Father>         代表只能传递Father类及其父类
     */
    public static void m1(ArrayList< ? extends GrandFather> arrayList) {

    }

    public static void m2(ArrayList<? super Father> arrayList) {

    }
}

在这里插入图片描述

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

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

相关文章

7种方法!教你如何使用Telerik UI for ASP.NET定制编辑器

Telerik UI for ASP.NET Core是用于跨平台响应式Web和云开发的最完整的UI工具集&#xff0c;拥有超过60个由Kendo UI支持的ASP.NET核心组件。它的响应式和自适应的HTML5网格&#xff0c;提供从过滤、排序数据到分页和分层数据分组等100多项高级功能。 Telerik UI for ASP.NET …

自己动手从零写桌面操作系统GrapeOS——4.1 在VirtualBox中安装CentOS

之前讲解开发环境时并没有介绍具体的安装过程&#xff0c;有网友反应CentOS的安装配置有问题&#xff0c;尤其是共享文件夹。本讲我们就来补充介绍一下在VirtualBox中安装配置CentOS的具体过程&#xff0c;彻底解决GrapeOS开发环境问题。 一、新建虚拟机 1.在VirtulBox中点击…

电脑主机启动不起来怎么回事?2023最新解决方法!

“我的电脑刚用才没多久&#xff0c;怎么主机突然就启动不起来了呢&#xff1f;试了很多方法还是不行&#xff0c;这我该怎么解决呀&#xff1f;” 在日常的学习和工作中&#xff0c;大多数人已经离不开电脑了。当然&#xff0c;在使用电脑的过程中&#xff0c;会遇到各种各样…

[Docker]入门之docker-compose

一&#xff0c;Docker-compose简介 1&#xff0c;Docker-compose简介 Docker-Compose项目是Docker官方的开源项目&#xff0c;负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层&#xff0c;分别是工程&#xff08;project&#xff09;&#xff0c…

Qt使用QQuickWidget的输入法问题(Qt5.12及以前)

Qt使用QQuickWidget的输入法问题&#xff08;Qt5.12及以前&#xff09; 最近有网友表示&#xff0c;在使用QQuickWidget嵌入到QWidget时&#xff0c;QML内部的输入法会有问题。 主要表现是&#xff0c;当焦点从QWidget&#xff08;比如QLineEdit&#xff09;切换到QQuickWidg…

Spring学习笔记——1

Spring学习笔记——1 一、Spring入门1.1、学习路线1.2、传统Javaweb开发困惑及解决方法1.3、三种思想的提出和框架概念1.3.1、IoC、DI和AOP思想提出1.3.2、框架的基本特点 1.4、Spring概述1.5、BeanFactory快速入门1.6、ApplicationContext快速入门1.7、BeanFactory与Applicati…

复习第四章集合+多线程

一、集合 Collection派生 我们在使用集合的时候其实更多的是使用List、Set、Map集合进行操作&#xff0c;List、Set又继承自Collection Collection下的集合为单列集合&#xff0c;可以理解为一个集合当中的数据只代表一个“对象”。 Map派生 Map代表的是存储key-value对的集…

为高性能计算构建,由亚马逊云科技Amazon Graviton3E驱动的最新实例正式可用

亚马逊云科技宣布两款基于最新一代自研芯片Amazon Graviton3E的新实例Amazon Elastic Compute Cloud&#xff08;Amazon EC2&#xff09;Hpc7g和Amazon EC2 C7gn正式可用。 其中&#xff0c;Hpc7g实例专为计算和网络密集型高性能计算&#xff08;HPC&#xff09;工作负载而构建…

K8s安全配置:CIS基准与kube-bench工具

01、概述 K8s集群往往会因为配置不当导致存在入侵风险&#xff0c;如K8S组件的未授权访问、容器逃逸和横向攻击等。为了保护K8s集群的安全&#xff0c;我们必须仔细检查安全配置。 CIS Kubernetes基准提供了集群安全配置的最佳实践&#xff0c;主要聚焦在两个方面&#xff1a;主…

axios 网络应用 axios基本使用

之前学了vue本地应用&#xff0c;通过Vue提供的各种指令&#xff0c;对本地的数据进行操作。 但是现在很少有纯本地的应用了&#xff0c;或多或少都会进行网络数据的交互。这个就想要axios&#xff0c;内部是阿贾克斯&#xff0c;封装之后使用起来更加便捷&#xff0c;并且功能…

【Java练习题汇总】《第一行代码JAVA》综合测试一,汇总Java练习题

Java练习题 综合测试一 1️⃣ 综合测试一 1️⃣ 综合测试一 下面关于Java 的特点不正确的一项是( )。 A. Java 具备跨平台性&#xff0c;可以在任意的操作系统间进行移植 B. Java 编写的程序可以直接解释执行&#xff0c;属于解释型的编程语言类型 C. Java 中具备垃圾收集机制…

Linux安装VScode

从本篇开始&#xff0c;打算有时间就写写在VScode中编写一些ros相关的案例程序用于学习记录。本篇是如何在Linux安装VScode的第一篇。 一、下载VScode 在Linux中打开浏览器输入&#xff1a;https://code.visualstudio.com/Download&#xff0c;选择与你电脑相匹配的版本下载&…

java版本spring cloud 企业工程系统管理 工程项目管理系统源码

&#xfeff; Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&…

浅谈Java转义符\|

浅谈Java转义符\| 看一段程序 String t "a||b||c||d"; String[] temp t.split("\\|\\|"); System.out.println(temp.length); 主要是&#xff1a;"\\|\\|" 代表什么意思&#xff1f; 开始有点蒙&#xff0c;后来仔细一看明白了&#xff0…

易基因:单细胞DNA甲基化与转录组分析揭示猪生发泡卵母细胞成熟的关键调控机制|项目文章

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 在哺乳动物中&#xff0c;窦卵泡内的生发泡(germinal vesicle&#xff0c;GV) 卵母细胞可以保持数月或数年的静止状态。促黄体生成素(luteinizing hormone&#xff0c;LH)激增促进了减数…

740.删除并获得点数

目录 一、题目 二、代码 一、题目 740. 删除并获得点数 - 力扣&#xff08;LeetCode&#xff09; 二、代码 转换成打家劫舍问题 class Solution { public:int deleteAndEarn(vector<int>& nums) {int Max nums[0];//nums中的最大点数for(int i0;i<nums.size(…

iTOP-RK3588开发板Debian系统使用 VNC 远程控制桌面-客户端连接

在 360 软件管家里面下载 VNC Viewer 软件&#xff0c;如下图所示&#xff1a; 然后打开软件&#xff0c;之后如下图所示&#xff1a; 然后我们点击左上角 file-》New connection&#xff0c;如下图所示设置&#xff0c;我们的 VNC Server 设为 192.168.1.14:1&#xff0c;其中…

柴洪峰院士:大模型赋能金融科技思考与展望

本文整理自7月7日世界人工智能大会“AI生成与垂直大语言模型的无限魅力”论坛上中国工程院院士、复旦大学金融科技研究院院长柴洪峰《大模型赋能金融科技思考与展望》的主题分享&#xff0c;从金融垂直模型构建、金融知识图谱与大模型融合以及金融大模型的监管三个方面进行介绍…

大数据Flink(五十五):Flink架构体系

文章目录 Flink架构体系 一、 Flink中的重要角色 二、Flink数据流编程模型 三、Libraries支持

风辞远的科技茶屋:来自未来的信号枪

很久之前&#xff0c;有位朋友问我&#xff0c;现在科技资讯这么发达了&#xff0c;你们还写啊写做什么呢&#xff1f; 我是这么看的。最终能够凝结为资讯的那个新闻点&#xff0c;其实是一系列事情最终得出的结果&#xff0c;而这个结果又会带来更多新的结果。其中这些“得出”…