泛型的介绍
首先看一个代码
有三个类,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();
就不需要强制类型转换了。
使用泛型的好处
- 集合中存储的元素类型统一了
- 从集合中去除的元素类型是泛型指定类型,不需要进行强制类型转换了
使用泛型的坏处
- 集合中的元素类型单一
自动类型推断机制
jdk8之后ArrayList<Animal> <>里的类型可以省略
ArrayList<Animal> l = new ArrayList<>();
自定义泛型
我们自己写的类也可以定义泛型,泛型的语法如下
[修饰符] class 类名<泛型的表示符>
例如
public class Demo<T>{
public T get(){
return null;
}
}
在类名后面加上<T>后,类中的T 被解释为泛型,可以是任何一种类型。
本文介绍了Java中的泛型概念,通过示例展示了如何使用泛型避免强制类型转换,提升代码安全性。泛型提供了集合元素类型统一,简化了代码,并在JDK8后引入了类型推断机制。同时,泛型也可应用于自定义类,增加了代码的复用性和灵活性。
306

被折叠的 条评论
为什么被折叠?



