JDK5.0之后推出新特性:泛型。
泛型这种语法机制,只在程序编译阶段起作用,只是给编译器参考的。(运行阶段泛型没用)
使用泛型的好处?
第一:集合中存储的元素类型统一了。
第二:从集合中取出元素类型是泛型指定的类型,不需要大量的”向下转型“。
泛型的缺点:导致集合中存储的元素缺乏多样性。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
*未使用泛型
* 从集合中取出元素需要进行转型
*/
public class GenericTest01 {
public static void main(String[] args) {
//创建对象
Cat c = new Cat();
Bird b = new Bird();
//将对象添加到集合中
List mylist = new ArrayList();
mylist.add(c);
mylist.add(b);
//遍历集合,取出每个Animal,让它move
Iterator it = mylist.iterator();
while (it.hasNext()) {
Object obj = it.next();
if (obj instanceof Animal) {
Animal a = (Animal) obj;
a.move();
}
}
}
}
class Animal {
public void move() {
System.out.println("动物在移动");
}
}
class Cat extends Animal {
public void CatchMoush() {
System.out.println("猫捉老鼠");
}
}
class Bird extends Animal {
public void Sing() {
System.out.println("鸟在唱歌");
}
}
//使用泛型机制
List<Animal> mylist = new ArrayList<Animal>();
mylist.add(c);
mylist.add(b);
Iterator<Animal> it = mylist.iterator();
while (it.hasNext()){
Animal a = it.next();
a.move();
}
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* JDK8之后引入了:自动类型推断机制。(又称钻石表达式)
*/
public class GenericTest02 {
public static void main(String[] args) {
//ArrayList<这里的类型会自动推断>()
//自动类型推断
List<Animal> mylist = new ArrayList<>();
mylist.add(new Animal());
mylist.add(new Cat());
mylist.add(new Bird());
//遍历
Iterator<Animal> it = mylist.iterator();
while (it.hasNext()) {
Animal a = it.next();
a.move();
}
}
}
自定义泛型
/**
* 自定义泛型
*/
public class GenericTest03<A> {
public void doSome(A a) {
System.out.println(a);
}
public static void main(String[] args) {
GenericTest03<String> gt = new GenericTest03<>();
gt.doSome("abc");
}
}
本文介绍了Java中泛型的使用,包括其带来的好处,如统一集合元素类型,减少类型转换,以及泛型的缺点,如降低元素多样性。同时,展示了JDK8以后的自动类型推断机制,简化了代码编写。通过示例代码,演示了如何使用泛型以及自动类型推断来操作集合和自定义泛型类。
922

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



