JavaSE-泛型

2026年AI编程工作流实战:Claude Code与Open Code深度对比 AI编程已从代码生成工具升级为IDE级智能工作流核心能力。其本质是将大语言模型深度嵌入开发环境,通过语义理解、上下文感知与行动闭环重构传统编码范式。Claude Code以企业级知识图谱和双轨Code Review为代表,强调合规性、可审计与深度集成;Open Code则依托Skill可组合性、本地优先模型与ocp协议,实现开源驱动的灵活扩展。二者共同推动IDE从‘编辑器’进化为‘数字搭档’——能理解RFC文档、记住PR评论、自动补全带重试的fetch逻辑,并在Promise链发呆时一键重构为async/a 阅读详情

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本篇文章主要讲述JavaSE知识体系中的泛型部分的内容。


一、案例分析

为了引出泛型的使用,我们先给出一个简单的小案例,并使用传统的方式(无泛型)实现。案例如下:请使用ArrayList来存储三个Dog对象的信息,每个Dog对象包含两个属性:姓名name、年龄age,存储完毕进行遍历输出。

1.1 传统方式

先定义一个Dog类:

/**
 * Dog类定义
 */
public class Dog {
    private String name;
    private Integer age;

    public Dog() {
    }

    public Dog(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

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

现在我们使用ArrayList来存储Dog对象并输出(不使用泛型):

public class Client1 {
    public static void main(String[] args) {
        ArrayList dogList = new ArrayList<>();
        //添加
        dogList.add(new Dog("哮天犬", 500));
        dogList.add(new Dog("大壮", 500));
        dogList.add(new Dog("小黄", 500));
        //遍历输出
        for (Object obj : dogList) {
            //向下转型
            Dog d = (Dog) obj;
            System.out.println(d);
        }
    }
}

分析代码,可以看到上述代码最直观的问题:

  1. 频繁地进行向下转型处理:每次从容器中取出对象都需要进行一个向下转型的处理,一是比较麻烦,二是当容器中数据量比较大时会影响到程序执行的效率。
  2. 编译期间检查不出数据类型异常:因为Object类是所有Java类的父类,那么可以向容器中加入任意类的对象。现我们创建Person类如下:
public class Person {
    private String name;
    private String address;

    public Person() {
    }

    public Person(String name, String address) {
        this.name = name;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

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

Person类的属性为:姓名name、地址address。现在我们往容器中加入Person类的对象:

public class Client1 {
    public static void main(String[] args) {
        ArrayList dogList = new ArrayList<>();
        //添加Dog对象
        dogList.add(new Dog("哮天犬", 500));
        dogList.add(new Dog("大壮", 500));
        dogList.add(new Dog("小黄", 500));
        //添加Person对象
        dogList.add(new Person("李不苟", "地球村"));
        dogList.add(new Person("沃士人", "地球村"));
        //遍历输出
        for (Object obj : dogList) {
            //向下转型
            Dog d = (Dog) obj;
            System.out.println(d);
        }
    }
}

可以看到编译器没有出现任何错误提示:
在这里插入图片描述
现在运行程序,发现控制台输出异常信息:
在这里插入图片描述
使用传统方式无法对加入容器中的数据类型进行约束。

1.2 使用泛型

话不多说,先来一波泛型的快速体验。使用泛型创建容器的代码为:

ArrayList<Dog> dogList = new ArrayList<>();

当我们想再往dogList 中添加Person类的对象时,编译器会出现错误提示且程序无法编译通过:
在这里插入图片描述
因为已经使用了泛型约束了容器dogList 只能存储Dog类的对象,所以遍历处理时也无需再进行向下转型处理:

public class Client2 {
    public static void main(String[] args) {
        ArrayList<Dog> dogList = new ArrayList<>();
        //添加Dog对象
        dogList.add(new Dog("哮天犬", 500));
        dogList.add(new Dog("大壮", 500));
        dogList.add(new Dog("小黄", 500));

        for (Dog dog : dogList) {
            System.out.println(dog);
        }
    }
}

在这里插入图片描述

二、泛型

2.1 概念

Java泛型又称为参数化类型,是JDK5.0出现的新特性,用于解决数据类型的安全性问题。Java泛型可以保证,如果程序在编译期间没有发出警告,那么运行时就不会出现类型转换异常(ClassCastException),同时,也可以使得代码更加简洁、健壮。
我们可以认为,Java中的泛型是一种数据类型,一种“表示某一种数据的数据类型”。

2.2 语法

2.2.1 声明

在接口/类中声明泛型的方式为:

  1. interface 接口名称<T,...>{}
  2. class 类名<K,V,...>{}

其中,字母T、K、V不代表值,而只是表示类型,字母的形式可以任意,一般常用T(Type)、K(Key)、V(value)等容易理解的形式。示例如下:

public interface MyInterface<T> {
}
public class Customer<K,V> {
}

2.2.2 实例化

泛型声明以后,使用时需要在接口/类名后面指定类型参数的值(类型)。示例如下:

public class Client3 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        Customer<String, Integer> customer = new Customer<>();
    }
}

2.3 细节

1.public class Customer<K,V> 中的K、V只能是引用类型。如下所示:

在这里插入图片描述
2. 在指定具体的泛型类型之后,可传入该类型或者其子类类型。示例如下:

public class Animal {
}
public class Cat extends Animal{
}
public class Client3 {
    public static void main(String[] args) {
        List<Animal> animals = new ArrayList<Animal>();
        //添加
        animals.add(new Animal());
        animals.add(new Cat());
    }
}

我们约束容器animals 的数据类型为Animal类型,但是当我们传入Cat类的实例对象时,编译器也不会出现编译错误。

3.当没有指定具体泛型类型时,默认就是Object类型(参见案例部分)。

2.4 自定义泛型类

自定义泛型类的语法形式如下:

class 类型<T,R,...> {
}

现自定义泛型类Person类如下:

public class Person<T> {
}

使用自定义泛型类的注意事项如下:

1.普通成员可以使用泛型(属性、方法等)。示例如下:

public class Person<T> {
    private T name;
    private Integer age;

    public Person(T name, Integer age) {
        this.name = name;
        this.age = age;
    }
    
    public T getName() {
        return name;
    }
}

2.使用泛型的数组,不能进行初始化(后文将会在泛型擦除章节中说明为什么不能初始化)。示例如下:
在这里插入图片描述
3.静态成员(属性、方法)不能使用泛型,示例如下:
在这里插入图片描述
4.泛型类的类型是在创建对象实例时确定的。
5.如果在创建对象时,没有指定泛型的类型,则默认为Object。

2.5自定义泛型接口

自定义泛型接口的基本语法格式为:

interface 接口名称<T, R, ...> {}

使用自定义泛型接口的注意事项如下:

1.接口中的静态成员(JDK1.8以后接口中可以有静态方法)也不能使用泛型(同自定义泛型类)。
2.泛型接口的类型在继承接口或实现接口时确定。示例如下:

public interface MyList<T> {
    void add(T item);
}
//如果继承接口时不指定类型则会出现错误
public interface MyArrayList extends MyList<String>{

}
//实现接口时同样需要指定类型
public class MyDataList implements MyList<Integer>{
    @Override
    public void add(Integer item) {
        
    }
}

3.同理,若没有指定类型则默认为Object。

2.6 自定义泛型方法

自定义泛型方法的语法格式为:

修饰符 <T,R,...> 返回类型 方法名(参数列表){}

其中<T,R,…>可称为泛型方法标识符,在方法被调用时根据所传类型确定泛型类型。
1.在普通类中可使用自定义泛型方法,示例如下:

public class Student {
    private String name;
    private Integer age;

    /*  自定义泛型方法    */
    public <T> void showInfo(T info) {
        System.out.println("info => " + info);
    }
}

在方法调用时可确定泛型类型:

public class Client {
    public static void main(String[] args) {
        Student student = new Student("cxk", 10000);
        //调用对象实例中的自定义泛型方法
        student.showInfo("我是练习时长...");
    }
}

在这里插入图片描述
2.在泛型类中同样可使用自定义泛型方法,自定义泛型方法的泛型符号可以是自定义的,也可以使用泛型类的泛型符号。示例如下:

public class Student<S> {
    private String name;
    private Integer age;

    public Student(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    /*  自定义泛型方法    */
    public <T> void showInfo(T info) {
        System.out.println("info => " + info);
    }

    /*  自定义泛型方法中使用泛型类的泛型符号    */
    public <T> void showPrivateInfo(T info, S extraInfo) {
        System.out.println("info => " + info + ", extraInfo: " + extraInfo);
    }
}

调用如下:

public class Client {
    public static void main(String[] args) {
        Student<Integer> student = new Student<>("小黑子", 99);
        //Integer类型 => 9527666
        student.showPrivateInfo("我不是小黑子,我的编号是: ", 9527666);
    }
}

在这里插入图片描述

2.7 泛型通配符

Java中的泛型通配符提供了一种更为灵活的方式来处理泛型。泛型通配符主要有3种形式:

  • 无界通配符:使用符号?表示,表示可以接收任意类型。示例如下:
public class Client1 {
    public static void main(String[] args) {
        List<String> strList = new ArrayList<>();
        strList.add("cxkun");
        strList.add("xiaoheizi");
        printList(strList);
        System.out.println("---------------");
        List<Integer> integerList = new ArrayList<>();
        integerList.add(9);
        integerList.add(999);
        printList(integerList);
    }
    
    /* List<?> dataList => 支持传入任意类型的List集合 */
    private static void printList(List<?> dataList) {
    	//任意类型 => 元素取出时为Object类型
        for (Object item : dataList) {
            System.out.println("item => " + item);
        }
    }
}

在这里插入图片描述

  • 上界通配符:使用? extends Type表示,表示可以是Type类型或者其子类类型。示例如下:
public class Animal {
    private String name;

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

	@Override
    public String toString() {
        return "Animal{" +
                "name='" + name + '\'' +
                '}';
    }
}
public class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }
}
public class Cat extends Animal {
    public Cat(String name) {
        super(name);
    }
}
public class Client2 {
    public static void main(String[] args) {
        //Animal集合
        List<Animal> animalList = new ArrayList<>();
        animalList.add(new Animal("哺乳动物老祖宗"));
        printList(animalList);
        //Dog集合
        List<Dog> dogList = new ArrayList<>();
        dogList.add(new Dog("大壮"));
        dogList.add(new Dog("旺财"));
        printList(dogList);
        //Cat集合..省略
    }

    /*   上界通配符  => List<? extends Animal   */
    private static void printList(List<? extends Animal> dataList) {
        for (Object item : dataList) {
            System.out.println("item => " + item);
        }
        System.out.println("---------------------");
    }
}

在这里插入图片描述

  • 下界通配符:使用? super Type表示,表示可以是Type类型或者其父类类型。示例如下:
public class Client2 {
    public static void main(String[] args) {
        //Animal集合
        List<Animal> animalList = new ArrayList<>();
        animalList.add(new Animal("哺乳动物老祖宗"));
        printList(animalList);
        //Dog集合
        List<Dog> dogList = new ArrayList<>();
        dogList.add(new Dog("大壮"));
        dogList.add(new Dog("旺财"));
        printList(dogList);
    }

    /*   下界通配符  => List<? super Dog> dataList   */
    private static void printList(List<? super Dog> dataList) {
        for (Object item : dataList) {
            System.out.println("item => " + item);
        }
        System.out.println("---------------------");
    }
}

三、拓展 - 泛型擦除

Java中的泛型擦除是指Java编译器在编译阶段将泛型类型参数从代码中移除(即擦除),并将其替换为原始类型或它们的上界(若未指定上界则为Object类型),即泛型信息在编译为字节码之后就丢失了,实际的类型都当做Object类型来处理。编写示例代码如下:

public class Client3 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        //存入
        list.add(6);
        //取出
        Integer num = list.get(0);
    }
}

查看字节码如下所示(IDEA可安装ASM Bytecode Outline插件):
在这里插入图片描述

  • list.add(6)实际调用的是List.add(Object o):当做Object类型存储。
  • list.get(0)实际调用的是Object obj = List.get(int index):取出为Object类型,但是做了一个强制类型转换,把Object类型转为Integer类型。
  • JVM指令checkcast:用于执行类型转换的检查。该指令确保对象引用可以安全地从一种类型转换为另一种类型。如果在运行时无法执行该转换,则 checkcast 指令会抛出 ClassCastException。

现在就可以回答2.4章节中的问题:为什么定义泛型数组不能进行初始化?Java中的泛型是通过泛型擦除来实现的,在编译时泛型信息已经被擦除,并替换为它们的上界(一般为Object),即在运行时JVM并不知道泛型的具体类型信息。创建数组时,JVM会在运行时执行类型检查以确保数组元素类型的一致性,但是由于泛型擦除,泛型数组T[]在运行时实际上变成了Object[](擦除后的某种原始类型,也不一定是Object),JVM不允许将Object[]直接视为T[],因为这样做可能会破坏类型安全性,即T[] arr = new T[10],这样的代码在编译时会报错,因为编译器无法确定T的具体类型,从而无法生成正确的字节码。

使用VIVADO 2019.1 搭建以太网接口 以太网 MAC+SGMII->GMII接口转换 以FPGA V7为例,搭建一个千兆以太网接口。运行环境为Vivado2019.1。板卡的FPGA V7与千兆网口芯片采用SGMII互联,最终实现FPGA与上位机之间的千兆网卡通信,实际实现时,V7采用MAC + GMII ->SGMII的结构。SGMII接口使用1G/2.5G Ethernet PCS/PMA or SGMII ip核,MAC层使用Tri Mode Ethernet MAC ip核。 由于MAC层IP不支持SGMII接口,因此需要G 阅读详情

相关推荐

AUTOSAR AP平台开发避坑指南:基于华为MDC的接口配置与数据通道实战

本文详细解析了AUTOSAR AP平台与华为MDC的协同开发实践,涵盖接口配置、数据通道优化及资源分配策略。通过实战案例展示如何解决传感器接入、通信协议栈优化等常见问题,提升智能驾驶系统性能。特别针对MDC平台特性,提供执行管理、调试调优及安全设计的专业指导,助力开发者高效完成ADAS/AD系统开发。

julia4scientist的博客 1139

你看不懂的东西

上课做作业

weixin_42230174的博客 1万+

微调BERT进行中文文本分类任务(Pytorch代码实现)

BERT(Bidirectional Encoder Representation from Transformers)是2018年10月由Google AI研究院提出的一种预训练模型。其模型结构由多层Transformer的Encoder堆叠而成,在大规模语料中进行预训练后,迁移到下游任务,仅进行参数微调训练,就能显著提升性能。本文聚焦于微调中文BERT进行新闻标题分类任务的代码实现。

Iswayzw的博客 1万+

Java SE 面向对象5

匿名对象 1 匿名对象概述 Person person = new Person("骚杰", 66, '男'); Person 类名 person 对象名 new Person(...) 像内存的堆区申请空间,创建一个Person类对象使用的内存空间 匿名对象 没有名字的对象,没有对象名的对象 格式: new 构造方法(所需参数) 用途 1. 提高开发效率,隐形眼镜日抛,一次性筷子 匿...

weixin_47095683的博客 2788

海康VisionMaster全局通信实战:从数据接收到流程触发

本文详细解析了海康VisionMaster全局通信的实战应用,重点阐述了如何通过配置通信模块与编写全局脚本,实现从外部设备(如PLC)接收数据并触发内部视觉流程。文章以TCP/IP通信为例,深入讲解了数据接收、解析、全局变量设置及流程触发的核心代码与调试技巧,帮助用户打通自动化项目中的设备联动关键环节。

weixin_29295541的博客 570

Ansys疲劳仿真:工程结构寿命评估的实战方法论

做了这么多年仿真,有个感受越来越深——静力学算得再漂亮,疲劳寿命预测不对,项目照样过不了评审。不是因为理论有多复杂,而是因为疲劳损伤的物理机制本身就带有统计属性,材料内部的微观缺陷分布、应力集中位置、载荷谱的随机性,每一项都能让结果偏移20%甚至更多。本文从实战出发,梳理Ansys疲劳仿真的核心流程,重点讲清楚载荷类型选择、S-N曲线处理、应力集中修正这几个最容易出问题的环节。疲劳仿真做好了,最大的收获不是跑出一个漂亮的Damage云图,而是对结构的真实薄弱环节建立起量化的认知。

keyanxiaobaigou的博客 529

JavaSE1【海量资源:itzyku.com】

javaSE1

Peng_423的博客 1588

特征工程自动化(FeatureTools实战)

本项目模拟生成的医疗、金融和电商等领域的原始数据,适用于自动化特征工程的场景。主数据表(Entity Table):例如用户数据、交易数据、患者数据等。字段可能包括用户ID、年龄、性别、注册日期、消费金额、行为记录等。关联数据表(Related Tables):例如订单数据、点击记录、诊疗记录等。多个表之间通过外键建立关联。patient_id:患者IDage:年龄gender:性别:入院日期:出院日期diagnosis:诊断结果。

闲人编程的博客 1360

网址汇总-笔记

loadrunner: https://www.cnblogs.com/fnng/archive/2012/07/15/2592344.html https://wenku.baidu.com/view/ca23a348e518964bcf847cc2.html?from=search# 资源下载: http://jmeter.apache.org/download_jmeter.cgi http://www.badboy.com.au/download/add http://www.oracle.com/

qq_34271943的博客 4586

Python爬虫实战:深度解析携程/飞猪酒店评论API与大数据采集

本文详细介绍了如何通过Python爬虫技术获取携程和飞猪平台的酒店评论数据。我们涵盖了从API分析、反爬虫对策到数据存储和处理的完整流程。API逆向分析:通过浏览器开发者工具发现和分析API接口反爬虫对策:使用请求头随机化、IP代理、浏览器自动化等技术异步处理:使用asyncio提高爬取效率数据质量:实现数据清洗和质量检查机制系统架构:构建可扩展的分布式爬虫系统未来改进方向:机器学习识别验证码分布式爬虫架构实时数据流处理更智能的反反爬虫策略。

2201_76125261的博客 602

ABB机器人将实时坐标发送给西门子PLC的具体方法示例

ABB机器人将实时坐标发送给西门子PLC的具体方法示例

Robot_PLC_HMI_Automation 4914

JavaSE从0到1-DAY4-多态(i)

多态多种形态同一个对象在不同情况下表现出不同的形态。在Java中,就是指同一个方法调用,由于对象不同,会执行不同的代码。把子类对象赋给父类引用,把小的变成大的把父类引用转换为子类引用,把大的变成小的用来判断对象的实际类型。

ppandss1的博客 521

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【JavaSE】泛型

Java中的泛型你真的了解吗?什么是类型擦除?逆变与协变?嗯? 来看看这篇分享吧!

m0_64098804的博客 997

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

JavaSE 泛型 入门

JavaSE 泛型 入门

ke1494057235的博客 409

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

JavaSE泛型的基本介绍

本文介绍了Java泛型的基本概念和使用规范。主要内容包括:泛型的概念、集合中使用泛型的必要性、自定义泛型类和方法的实现方式、泛型在继承中的体现,以及通配符的使用方法。特别强调了泛型类型参数的使用限制,如必须使用引用数据类型、静态方法不能使用类的泛型等。文章还分析了有限制条件的通配符(extends和super)的读写特性,并指出泛型类与泛型方法之间没有必然联系。最后,还讨论了泛型类和泛型方法的具体使用场景和注意事项。

2301_77987130的博客 665

全栈学习 ——javaSE(六)泛型、反射与注解

摘要: 本文系统介绍了JavaSE中泛型、反射与注解三大核心技术。泛型通过编译时类型检查确保类型安全,支持代码复用;反射允许运行时动态获取类信息并操作私有成员,是框架设计的核心;注解作为元数据标记代码元素,配合反射实现标记-解析逻辑。三者共同构成Java框架开发的基础:泛型保障类型安全,反射提供动态能力,注解简化配置。文章详细讲解了各项技术的核心概念、基本用法、应用场景及相互关系,并配有代码示例说明实际应用。

m0_64198455的博客 6040

JavaSE -- 泛型详细介绍

摘要:Java泛型通过参数化类型增强了类型安全性,在编译阶段检测类型错误。主要包含泛型类、泛型接口和泛型方法三种形式,使用T、E、K、V等字母规范类型参数。泛型类/接口通过尖括号定义类型,泛型方法在调用时指定类型。为解决泛型引用传递问题,提供了三种通配符:无边界(<?>)、上边界(<? extends E>)允许子类类型,下边界(<? super E>)允许父类类型。泛型仅支持引用类型,有效避免了运行时类型转换异常,提升了代码的灵活性和安全性。(150字)

qq_75103498的博客 667

Day10_2 JavaSE 泛型

JavaSE 泛型(Generic) 一、为什么要有泛型Generic? 为了保证只有指定类型添加到集合中,类型安全 举例说明: package com.generic.demo01; import java.util.ArrayList; import java.util.List; public class Demo01 { public static void main(...

Targetu 未来可期 223

JavaSE阶段学习02:Collection、泛型

JavaSE阶段学习02:Collection、泛型 主要内容 Collection集合 迭代器 增强for(foreach) 泛型 教学目标 [ ] 能够说出集合与数组的区别 [ ] 说出Collection集合的常用功能 [ ] 能够使用迭代器对集合进行取元素 [ ] 能够说出集合的...

chizhuanchang7722的博客 148

JavaSE-Day23泛型

模拟ArrayList自定义实现泛型类。

学习java的大雪笙一枚 560

JavaSE泛型之思维导图总结

JavaSE泛型之思维导图总结

weixin_43774841的博客 743

重学JavaSE 第14章 : 泛型、自定义泛型、泛型通配符

重温 Java 泛型、自定义泛型、泛型通配符

Guizy 862

Javase 基础加强 —— 02 泛型

本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员Java+AI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。

Celeste的博客 479

javaSE.泛型界限

extends Number, 不能确定是Number的类及其哪个子类,这样子去setValue,无法确定是否是这个类型,虽然他确实是Integer👇👇。也可以创建对象这样设置,上界必须是Integer👇。限定下界就没有上述的问题👆👇👇👇下界的话。上界Number获取的是Number👇。继承自Number类的就符合要求👇。这里是隐式类型转换为Object👇。同理Integer为上界👇👇👇。强转子类Integer👇。Number为上界👇👇👇。快速获取类型var👇。

2401_87338545的博客 211

JavaSE思维导图——泛型

ilovestudy_的博客 498

JavaSE-泛型(个人笔记,勿喷)

接下来我们学习一下自定义泛型类,但是有一些话需要给大家提前交代一下:泛型类,在实际工作中一般都是源代码中写好,我们直接用的,就是ArrayList<E>这样的,自己定义泛型类是非常少的。在上一节中,我们已经学习了自定义泛型类,接下来我们学习一下泛型接口。泛型接口其实指的是在接口中把不确定的数据类型用<类型变量>表示。//这里的类型变量,一般是一个字母,比如<E>public interface 接口名<类型变量>{

weixin_52027476的博客 403
上一篇: Java并发编程-线程池(01)
Zzzkt
博客等级 码龄7年 149粉丝 6原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值