章15——泛型generic
1.章10——面向对象编程(高级部分)——类名类方法2.章10——面向对象编程(高级部分)——main方法3.章10——面向对象编程(高级部分)——代码块4.章10——面向对象编程(高级部分)——两种单例模式5.章10——面向对象编程(高级部分)——final关键字6.章10——面向对象编程(高级部分)——抽象类7.章10——面向对象编程(高级部分)——内部类8.章12——异常exception9.章13——常用类——包装类,Integer类10.章13——常用类——String类11.章13——常用类——StringBuffer类12.章13——包装类——StringBuilder类13.章13——包装类——Math类14.章13——包装类——Arrays类15.章13——包装类——System类16.章14——集合——集合体系17.章14——集合——Collection 接口18.章14——Hashtable
19.章15——泛型generic
20.章16——坦克大战1——绘图、事务泛型的引入
泛型引入前后代码的比较
public static void main(String[] args) {
ArrayList arrayList = new ArrayList();
arrayList.add(new Dog("wang",10));
arrayList.add(new Dog("xin",1));
arrayList.add(new Dog("ran",5));
//遍历
for (Object o :arrayList) {
//需要向下转型
Dog dog = (Dog) o;
System.out.println(dog.getName());
}
//表示存放到该集合中的元素只能是DOG类型或者其子类型
//如果编译器发现不满足要求就会报错
ArrayList<Dog> arrayList1 = new ArrayList<Dog>();
arrayList1.add(new Dog("wang",10));
arrayList1.add(new Dog("xin",1));
arrayList1.add(new Dog("ran",5));
//遍历时候可以直接取出DOG类型而非OBJECT
//因为编译器明白,一定能取出DOG类
for (Dog dog : arrayList1) {
System.out.println(dog.getName());
}
}
}
泛型介绍
泛型是一种可以表示(接收)数据类型的数据类型。
class Person3<E>{
//属性的类型是在创建或者定义PERSON时去指定一个
//或者是某个方法的返回值类型,参数类型
E s;
public Person3(E s){
this.s = s;
}
public E f(){
return s;
}
public void t(){
//此处的显示是变化的,E可以表示数据类型的一种
System.out.println(s.getClass());
}
}
泛型的语法
泛型的使用细节
自定义泛型
自己写了个类或者接口,然后自己规定泛型,C++中的模板。
静态方法是和对象没有关系的,所以无法判断泛型是什么类型。
所以静态数据成员和静态成员方法都不可以用泛型。
在类加载时对象还没有创建。
JVM无法完成初始化。
使用泛型的数组不可以初始化,如下:
及不可以直接实例化。
创建对象时不指定泛型类型是OK的,不一定非要<>才可以构建。但是此时所有泛型全都指定为OBJECT。
如上,接口中定义的成员不能使用泛型.
继承接口时:
当调用方法时,传入参数,编译器就会确定类型。(直接往里面传参数就OK了)
方法分为泛型方法(必须新自定义泛型),和仅仅使用了泛型的方法。
泛型的继承和通配符
图片中的第一条代码是不允许的,因为泛型不具有继承性。
通配符用于定义了泛型的类作为参数时,比如系统定义或者自定义,规定了接收使用了何种泛型的类,如下图:
JUNIT
在方法上方@Test alt + enter,一般是在JUNIT5.4
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!