JavaSE——面向对象高级三(4/5)-认识泛型、定义泛型类、定义泛型接口

简介: JavaSE——面向对象高级三(4/5)-认识泛型、定义泛型类、定义泛型接口

认识泛型

泛型

  • 定义类、接口、方法时,同时声明了一个或者多个类型变量(如:<E>),称为泛型类、泛型接口、泛型方法、它们统称为泛型。
public class ArrayList<E>{
    ...
}

例如ArrayList就是泛型类,

在使用ArrayList的过程中,我们如果没有给他指定类型,其实就是没有使用泛型,这时他将可以接受任何类型的信息,例如:

public class Test{
    public static void main(String[] args){
        ArrayList list = new ArrayList();
        list.add("Java1");  
        list.add(new Cat());  //传入对象也不会报错
 
        //但此时我们想要以字符串的形式输出list里的所有信息
        //String e = list.get(1); 这样会报错,Cat对象不能被String类型接受
        String e = (String) list.get(1); //用到强制类型转换,编写时不会报出错误
        //但在执行时会出错,Cat对象是无法直接强转转换成String类型的
    }
}
class Cat{}

所以我们就需要用到泛型,来限制传入的类型。

// ArrayList<String> list1 = new ArrayList<String>();
ArrayList<String> list1 = new ArrayList<>(); //JDK 1.7开始,后面的数据类型可以不声明
  • 作用:泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力!这样可以避免强制类型转换,及其可能出现的异常。
  • 泛型的本质:把具体的数据类型作为参数传给类型变量。

定义泛型类

修饰符 class 类名<类型变量,类型变量,...>{


}


简单写一个ArrayList的小框架,具体演示一下如何自己定义泛型类:

public class MyArrayList<E>{
    //首先定义数组,类型为Object是为了接收各种类型的数据
    private Object[] arr = new Object[10]; //大小暂定为10
    private int size; //记录当前位置
 
    public boolean add(E e){
        arr[size++] = e;
        return true;
    }
    public E get(int index){
        return (E) arr[index]; //因为数组中存放的是Object类型的,所以需要强转为指定的类型E
    }
}

泛型类还可以有一些特殊的定义,例如:

传入参数定义为多个数据类型:

public class MyClass1<E,T>{
    public void put(E e,T t){
    }
}

传入参数定义为继承类:

1. public class MyClass2<E extends Animal>{
2. }

以上两种方式都是支持的。

定义泛型接口

修饰符 interface 接口名<类型变量,类型变量,..>{

}

1. public interface A<E>{
2.     ...
3. }

通过一个小案例来看一下具体如何定义泛型接口的:

需求:系统需要处理学生和老师的数据,需要提供两个功能:保存对象数据,根据名称查询数据。

如果我们使用接口来实现,那么这个接口不知道要接入Student类还是Teacher类,所以就用到了泛型接口,接口名称就为Data

public interface Data<T>{
    void add(T t);
    ArrayList<T> gerByName(String name);
}

再回去定义需求里面的Teacher类(功能不实现)

public class TeacherData interface Data<Teacher>{
    @Override
    public void add(Teacher teacher){
    }
    @Override
    public ArrayList<Teacher> getByName(String name){
    }
}

Student类同理。

泛型接口也和泛型类一样,可以有特殊一点的类型变量定义。

注意:类型变量建议用大写的英文字母,常用的有:E、T、K、V等


END



目录
相关文章
|
17天前
|
Linux 开发工具 iOS开发
Codex保姆级教程(下载+安装+登录+使用,含所有版本,2026最新)
Codex是OpenAI推出的开源AI编程智能体,本地运行,可理解整个代码库,支持自然语言指令改代码、执行命令、跑测试、修Bug,兼容Win/macOS/Linux。(239字)
6937 52
|
4天前
|
JSON 前端开发 API
阿里云最新Qwen4-Max大模型介绍:模型定位、特征、能力、适用场景解析
2026 年 11 月 11 日,阿里发布第四代旗舰模型Qwen4-Max预览版,首发千问 AI 平台 Token Plan,并同步接入千问办公、Qoder 等入口。该版本聚焦知识理解、世界感知、编程与 Agentic 四项升级,主打复杂编程、专业办公、前端设计与专业软件操作。预览期至 11 月 25 日 24:00,到期后模型标识下线;限时 2 折、新用户再享 5 折,最低 1 折可体验。
|
5天前
|
云安全 人工智能 安全
|
17天前
|
JavaScript API iOS开发
DeepSeek Harness下载、安装、配置一篇搞定(2026整理,送常用插件)
DeepSeek Harness(DSH)是DeepSeek于2026年开源的MIT协议AI Agent框架,支持插件化组装模型、工具、沙箱与UI,兼容主流大模型。本文提供免Node.js的桌面端安装包(Win/macOS),含详细图文教程及热门插件推荐。
5423 65
|
11天前
|
Linux 开发工具 iOS开发
2026最新codex下载安装保姆级使用教程(下载+安装+登录+使用,含所有历史版本)
本文详解OpenAI Codex国内快速上手指南:提供Win/macOS/Linux全平台免安装包、npm/Homebrew等多方式安装、账号/API Key双登录、简体中文切换,覆盖下载、安装、汉化、使用及高频避坑(如微软商店失败、npm超时等),10分钟即可跑通。
2734 7
|
4天前
|
人工智能 前端开发 API
阿里云Qwen4-Max 大模型详解:定位、特征、能力、适用场景与相对Qwen3-Max差异解析
2026年11月11日,阿里发布第四代旗舰模型Qwen4-Max预览版,首发千问AI平台Token Plan并接入千问办公、Qoder等入口。该版本聚焦知识理解、世界感知、编程与Agentic四项升级,主打复杂编程、专业办公、前端设计与专业软件操作等真实任务。预览期为11月11日10:00至11月25日24:00,仅支持Token Plan调用,到期后模型标识下线;限时2折、新用户再享5折,最低1折可体验。
|
9天前
|
人工智能 安全 API
DeepSeek Harness下载、安装、配置一篇搞定(2026整理,送常用插件)
DeepSeek Harness(dsh)是DeepSeek AI于2026年开源的轻量级Agent运行框架,基于Cordis内核,践行“一切皆插件”理念。支持Web/桌面双端,开箱即用;内置多模型接入、丰富插件生态(超3.5万),适配编程、办公、创作等场景。(239字)
1768 1
|
1天前
|
弹性计算 人工智能 API
Codex超详细入门指南(下载·安装·登录·上手,全版本覆盖,2026最新版)
建议收藏本教程,2026 全年各版本更新随时回来查阅。如果你在搭建过程中遇到任何问题,欢迎结合 阿里云工单系统 提交技术支持请求,或在 阿里云开发者社区 搜索 Codex 相关话题交流。 祝你编码愉快,效率翻倍!
1052 0
|
7天前
|
人工智能 iOS开发 开发者
2026年 Codex 下载地址更新:codexdown.cn 已更换为 codexdown.cc(附 Codex 客户端下载)
2026年Codex官方下载站已由codexdown.cn正式迁移至codexdown.cc,提供Windows/macOS最新客户端、历史版本、安装教程及配置指南,开发者可一站式获取稳定、安全、签名验证的AI编程工具资源。(239字)
1597 0