java韩顺平学习笔记9 (泛型)

java韩顺平学习笔记9 (泛型)

泛型的理解和好处

引出泛型

image-20230825133125376

如果集合中,不小心添加了一只猫对象,会导致运行时程序出错。

image-20230825133655221

泛型的好处

image-20230825134728469

image-20230825134754334

public static void main(String[] args) {
    ArrayList<Dog> arrayList = new ArrayList()<Dog>;

    arrayList.add(new Dog(5,"小黑","黑色"));
    arrayList.add(new Dog(5,"旺财","白色"));
    arrayList.add(new Dog(6,"小黄","黄色"))
    //不小心添加了一只猫
    //arrayList.add(new Cat("tom",10,"蓝色"));
    for (Dog dog :arrayList) {		//直接取出Dog类型,不必转换
        System.out.println(dog);	//遍历输出
    }

}
class Person<E>{
	E s;	//E表示s的数据类型,E的数据类型在定义Person对象时确定
	public Person(E s){
		this.s = s;
	}
	public E f1(){	//定义f1返回的数据类型为E
		return s;
	}
}
  • 泛型类型参数不能是原始数据类型,而应该是对象

泛型应用实例(Map)

public static void main(String[] args) {
    Map<String,Person> hashmap = new HashMap<String, Person>();		//泛型规定K是String
    																//V是Person
    hashmap.put("lulu",new Person("lulu",23));
    hashmap.put("hh",new Person("hh",11));
    hashmap.put("aa",new Person("aa",13));
    Set<Map.Entry<String,Person>> entries = hashmap.entrySet();
    for (Map.Entry entry :entries) {
        System.out.println(entry.getKey() + "--" + entry.getValue());
    }

}

泛型使用细节

  • image-20230829021415730
    • 可以简化右边的 <>

自定义泛型类

image-20230830002022203

自定义泛型接口

image-20230830002336131

自定义泛型方法

image-20230829235954006

调用泛型方法时,类型会被确定(根据传入的参数类型)

public class Test3 {
    public static void main(String[] args) {
        Food food = new Food();
        food.live(123,"444");
    }
}
class Food{
    public <A,B> void live(A a,B b){
        System.out.println(a.getClass());
        System.out.println(b.getClass());
    }
}

image-20230830001044811

泛型的继承和通配符

  • 泛型没有继承性,不能向上转型
  • <?> :支持任意泛型类型
  • <? extend A> :支持A类以及A类的子类,规定了泛型的上限
  • <? super A> : 支持A类以及A类的父类,不限于直接父类.规定了泛型的下限
public void eat(List<? extends Person> person){
    
}
public void eat(List<?> person){	//	使用泛型,可以传入任意泛型的类型的List集合
    
}

Junit的使用

image-20230831140748809

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值