JAVA泛型

本文介绍了Java中的泛型概念,通过示例展示了如何使用泛型避免强制类型转换,提升代码安全性。泛型提供了集合元素类型统一,简化了代码,并在JDK8后引入了类型推断机制。同时,泛型也可应用于自定义类,增加了代码的复用性和灵活性。

泛型的介绍

首先看一个代码

有三个类,Cat类和Bird类继承于Animal类,将一个Cat对象和Bird对象放入数组list,遍历list的时候,由于list存储的元素是以Object类型来存储的,所以需要使用instanceof和强制类型转换,将Object类型转换为Animal类型,才可以调用speak方法。

public class test{
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        Cat c = new Cat();
        Bird d  = new Bird();
        list.add(c);
        list.add(d);
        Iterator it = list.iterator();
        while(it.hasNext()){
            Object o = it.next();
            if(o instanceof Animal){
                Animal a = (Animal)o;
                a.speak();
            }
        }
    }

}

abstract class Animal{
     public abstract void speak();
}

class Cat extends Animal{
    public void speak(){
        System.out.println("喵喵喵");
    }
}

class Bird extends Animal{
    public void speak(){
        System.out.println("叽叽叽");
    }
}

如果使用泛型,定义list 的时候这样来定义

ArrayList<Animal> list = new ArrayList<Animal>();

这样,list就只允许放Animal类型的引用了。

类似的,获取迭代器时候,这样来获取

Iterator<Animal> it = list.iterator();

就不需要强制类型转换了。

 

使用泛型的好处

  1. 集合中存储的元素类型统一了
  2. 从集合中去除的元素类型是泛型指定类型,不需要进行强制类型转换了

使用泛型的坏处

  1. 集合中的元素类型单一

 

自动类型推断机制

jdk8之后ArrayList<Animal> <>里的类型可以省略

ArrayList<Animal> l = new ArrayList<>();

 

 

自定义泛型

我们自己写的类也可以定义泛型,泛型的语法如下

[修饰符] class 类名<泛型的表示符>


例如
public class Demo<T>{
    public T get(){
        return null;
    }
    
}

在类名后面加上<T>后,类中的T 被解释为泛型,可以是任何一种类型。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值