当前位置: 首页 > news >正文

Javase 基础加强 —— 02 泛型

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

01 认识泛型

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

作用:泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力!

package generic;import java.util.ArrayList;public class GenericDemo1 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<String>(); //泛型list.add("msc");list.add("zlg");list.add("phd");list.add("zqy");for(int i=0; i<list.size(); i++){String s = list.get(i);System.out.println(s);}}
}

02 泛型类

在这里插入图片描述

MyArrayList.java

//自定义泛型类
public class MyArrayList<E>{//换汤不换药private ArrayList list = new ArrayList();public boolean add(E e){return list.add(e);}public boolean remove(){return list.remove(e);}@Overridepublic String toString(){return list.toString();}
}

03 泛型接口

在这里插入图片描述

Student.java 自定义类

public class Student {
}

Teacher.java 自定义类

public class Teacher {
}

Data.java 自定义接口

public interface Data<T> {void add(T t);void delete(T t);void update(T t);T find(int id);
}

StudentData.java 自定义接口实现类(传递Student类)

public class StudentData implements Data<Student>{@Overridepublic void add(Student student) {}@Overridepublic void delete(Student student) {}@Overridepublic void update(Student student) {}@Overridepublic Student find(int id) {return null;}
}

TeacherData.java 自定义接口实现类(传递Teacher类)

public class TeacherData implements Data<Teacher>{@Overridepublic void add(Teacher teacher) {}@Overridepublic void delete(Teacher teacher) {}@Overridepublic void update(Teacher teacher) {}@Overridepublic Teacher find(int id) {return null;}
}

GenericDemo3.java

public class GenericDemo3 {public static void main(String[] args) {//目标:自定义泛型接口StudentData stu = new StudentData();stu.add(new Student());stu.delete(new Student());Student stu2 = stu.find(1);}
}

04 泛型方法

在这里插入图片描述

public class GenericDemo4 {public static void main(String[] args) {String[] names = {"张三","李四","王五","赵六"};printArray(names);String max = getMax(names);Student[] stus = new Student[100];printArray(stus);Student max2 = getMax(stus);}public static <T> void printArray(T[] names){}public static <T> T getMax(T[] names){return null;}
}

05 通配符和上下限

通配符就是?,可以在使用泛型的时候代表一切类型,ETKV是在定义泛型的时候使用。

在这里插入图片描述

Car.java

public class Car {
}

Xiaomi.java

public class Xiaomi extends Car{
}

Weilai.java

public class Weilai extends Car{
}

GenericDemo5.java

import java.util.ArrayList;public class GenericDemo5 {public static void main(String[] args) {ArrayList<Xiaomi> xiaomis = new ArrayList<>();xiaomis.add(new Xiaomi());xiaomis.add(new Xiaomi());xiaomis.add(new Xiaomi());ArrayList<Weilai> weilais = new ArrayList<>();weilais.add(new Weilai());weilais.add(new Weilai());weilais.add(new Weilai());}public static void go(ArrayList<? extends Car> cars){}
}

06 泛型支持的类型

泛型不支持基本数据类型,故产生了包装类,包装类就是把基本数据类型包装成对象类型。

在这里插入图片描述

  • 自动装箱:基本数据类型可以自动转换为包装类型。
  • 自动拆箱:包装类型可以自动转换为基本数据类型。

为了万物皆对象,并且泛型和集合都不支持基本类型,我们支持包装类!

package generic;import java.util.ArrayList;public class GenericDemo6 {public static void main(String[] args) {Integer it1 = Integer.valueOf(100); //不是数字100,而是对象100Integer it2 = Integer.valueOf(100); //it1 == it2//自动装箱Integer it3 = 150;Integer it4 = 145;ArrayList<Integer> list = new ArrayList<>();list.add(138);//自动拆箱int i1 = it3;int i2 = list.get(138);System.out.println("-----------------------------------------");//重要作用:包装类可以将字符串数值转化为对应的基本数据类型String s1 = "98";int i = Integer.valueOf(s1);System.out.println(i + 2); //100String s2 = "3.14";double d = Double.valueOf(s2);System.out.println(d + 2); //5.14}
}
http://www.dtcms.com/a/171611.html

相关文章:

  • mq消息可靠性传送
  • 神经网络模型深度解析——从线性分类到动态记忆的理论与实践
  • 网络:TCP三次握手、四次挥手
  • 在有限的内存中计算超限数据的重复值
  • 北极花 APP:开启生物多样性调查新模式,助力生态保护
  • 套接字+Socket连接
  • # 基于SIFT的图像相似性检测与拼接:Python实现与解析
  • 解析MCUboot的实现原理和Image结构
  • ReentrantLock实现公平锁和非公平锁
  • 关于离散化算法的看法与感悟
  • 用状态变量根据超稳定性理论设计模型参考自适应系统
  • 2025年深圳杯D题第二版本python代码 论文分享
  • 一些好玩的东西
  • 学习方法讨论——正论科举精神的内核
  • 十大机器学习算法:理论与实战
  • 「Mac畅玩AIGC与多模态18」开发篇14 - 多字段输出与结构控制工作流示例
  • Android逆向学习(八)Xposed快速上手(上)
  • RTX-3090 Qwen3-8B Dify RAG环境搭建
  • Vue 3 中 ref 的使用例子
  • 大连理工大学选修课——图形学:第一章 图形学概述
  • 相向双指针-16. 最接近的三数之和
  • 新一代智能座舱娱乐系统软件架构设计文档
  • 【计网】互联网的组成
  • Linux watch 命令使用详解
  • Easy云盘总结篇-文件上传01
  • 高等数学-第七版-下册 选做记录 习题10-2
  • LangChain4J-XiaozhiAI 项目分析报告
  • FiLo++的框架图介绍
  • Sway初体验
  • SwinTransformer 改进:与PSConv结合的创新设计