泛型
- JDK5.0之后推出的新特性:泛型
- 泛型这种语法机制,只在程序编译阶段起作用,只给编译器参考的(运行阶段没用)
- 使用泛型的好处:集合中存储的元素统一了
- 从集合中取出来的元素类型是泛型指定的类型,不需要进行大量的“向下转型”
- 泛型的缺点:集合中的元素缺乏多样性
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class GenericTest {
public static void main(String[] args) {
List mylist = new ArrayList();
Cat c = new Cat();
Bird b = new Bird();
mylist.add(c);
mylist.add(b);
Iterator it = mylist.iterator();
while(it.hasNext()){
Object obj = it.next();
if(obj instanceof Animal){
Animal a = (Animal) obj;
a.move();
}
}
List<Animal> myList = new ArrayList<Animal>();
Cat c1 = new Cat();
Bird b1 = new Bird();
mylist.add(c1);
mylist.add(b1);
Iterator<Animal> it1 = mylist.iterator();
while(it1.hasNext()){
Animal a = it1.next();
a.move();
}
}
}
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("鸟儿在飞!");
}
}
泛型的自动类型推断机制(钻石表达式)
- ArrayList<这里的类型会自动类型推断>(),JDK8之后
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class GentericTest02 {
public static void main(String[] args) {
List<Animal> myList = new ArrayList<>();
myList.add(new Animal());
myList.add(new Cat());
Iterator<Animal> it = myList.iterator();
while(it.hasNext()){
Animal a = it.next();
a.move();
}
}
}
自定义泛型
- 自定义泛型的时候 <> 尖括号中的是一个标识符,随便写
- java源代码中经常出现的是 E T 分别表示Element Type
public class GentericTest03<标识符随便写> {
public void dosame(标识符随便写 o) {
System.out.println(o);
}
public static void main(String[] args) {
GentericTest03<String> gt = new GentericTest03<>();
gt.dosame("sss");
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)