泛型使用和自定义泛型

本文探讨了Java中的泛型机制,包括其引入的原因、优点和不足。泛型提供了类型安全,使得集合中的元素类型统一,避免了运行时的强制类型转换。然而,泛型也限制了集合的元素多样性。在实际应用中,尽管可以避免基本的类型转换,但若要调用子类特有的方法,仍需进行类型检查和转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package Genericity;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/*
    泛型

 */
public class Test01 {
    public static void main(String[] args) {
        //不使用泛型时,分析程序存在的缺点
//        List list = new ArrayList();
//        Cat cat = new Cat();
//        Bird bird = new Bird();
//        list.add(cat);
//        list.add(bird);
//        //迭代器
//        Iterator iterator = list.iterator();
//        while(iterator.hasNext()){
//            Object next = iterator.next();
//            if (next instanceof Animal) {
//                Animal animal = (Animal) next;//不使用泛型 每次迭代出的元素都需要强制转换成Animal才能使用.move方法
//                animal.move();
//            }
//        }
/*
    JDK5之后的泛型机制
    而使用泛型的好处是:
        1.集合中存储的元素类型统一了
        2.从集合中取出的元素类型都是泛型指定的类型,不需要每次都进行强转
       缺点?
       导致集合中的元素缺乏多样性,只能存一种类型。
 */
        List<Animal> list = new ArrayList<Animal>();
        Cat cat = new Cat();
        Bird bird = new Bird();
        list.add(cat);
        list.add(bird);
        Iterator<Animal> iterator = list.iterator();
        while (iterator.hasNext()) {
            Animal next = iterator.next();
            next.move();
            //但是如果需要调用子类的特有方法,还是需要强转!
            if (next instanceof Cat){
                Cat cat1=(Cat)next;
                cat1.catchMouse();
            }
            if (next instanceof Bird){
                Bird bird1=(Bird)next;
                bird1.fly();
            }
        }
    }
}

class Animal {
    public void move() {
        System.out.println("动物在移动");
    }
}

class Cat extends Animal {
    public void catchMouse() {
        System.out.println("猫抓老鼠");
    }
}

class Bird extends Animal {
    public void fly() {
        System.out.println("鸟儿在飞翔");
    }
}


自定义泛型:

此时的test01在调用dosome方法时只能传入Integer类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值