做网站 科目,新加坡注册公司需要多少钱,传媒网站源码带手机,深圳商城网站建设报价单泛型 引言#xff1a; 泛型#xff1a;泛型允许程序员在编写代码时使用一些以后才指定的类型#xff0c;在实例化时作为参数指明这些类型人话#xff1a;泛型对规定范围产生约束#xff0c;约束后只能存储泛型指定的类型诞生#xff1a;JDK5.0以后作用#xff1a;泛型旨…泛型 引言 泛型泛型允许程序员在编写代码时使用一些以后才指定的类型在实例化时作为参数指明这些类型人话泛型对规定范围产生约束约束后只能存储泛型指定的类型诞生JDK5.0以后作用泛型旨在程序的编译阶段起作用只是给编译器参考使用的运行阶段泛型没用使用List类名A标识符表示List集合中只允许存储类名A类型的数据用泛型来指定集合中存储的数据类型类名标识符里面一般是类名也可以自定义类名标识符优点集合存储的元素类型统一集合中取出的元素类型是泛型指定类型不需要进行大量的“向下转型”不需要大量的强制类型转换缺点集合中存储的元素缺乏多样性代码演示 未使用泛型前
package com.lbj.javase.collection;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class GenericTest01 {public static void main(String[] args) {List listnew ArrayList();//准备对象Animal animalnew Cat();Animal animal1new Bird();//将对象添加到集合中list.add(animal);list.add(animal1);//遍历集合取出每个Animal让它move()Iterator iteratorlist.iterator();while (iterator.hasNext()){//o中没有move方法无法调用需要向下转型Object oiterator.next();//通过判断是否o属于某个类达到转型效果if (o instanceof Animal){Animal a (Animal) o;a.move();System.out.println(a);}}}}
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(鸟在飞);}
}使用泛型后
package com.lbj.javase.collection;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class GenericTest01 {public static void main(String[] args) {List listnew ArrayList();//准备对象Animal catnew Cat();Animal birdnew Bird();//将对象添加到集合中list.add(cat);list.add(bird);//遍历集合取出每个Animal让它move()
// Iterator iteratorlist.iterator();
// while (iterator.hasNext()){
// //o中没有move方法无法调用需要向下转型
// Object oiterator.next();
//
// //通过判断是否o属于某个类达到转型效果
// if (o instanceof Animal){
// Animal a (Animal) o;
// a.move();
// System.out.println(a);
// }//}//获取迭代器IteratorAnimal iteratorlist.iterator();//遍历集合表示迭代器迭代的是Animal类型while (iterator.hasNext()){//使用泛型后每一次迭代返回的数据都是Animal类型Animal animaliterator.next();animal.move();System.out.println(animal);//调用子类特有的方法还是需要继续向下转型的if (animal instanceof Cat){Cat c (Cat) animal;c.catchMouse();}if (animal instanceof Bird){Bird b (Bird) animal;b.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(鸟在飞);}
}自定义泛型
引言 自定义泛型类就是把泛型定义在类上用户使用该类的时候才把类型明确下来 自定义泛型的时候是尖括号中的一个标识符内容随便写 java源代码中经常出现的E和T E 表示 Element T表示 Type 用户想要使用哪种类型就在创建的时候指定类型。使用的时候该类就会自动转换成用户想要使用的类型了。 代码演示
package com.lbj.javase.collection;/*** author LBJ* version V1.0* Package com.lbj.javase.collection* date 2021/4/10 15:49* Copyright 公司*/
public class GenericTest03{
//类比得出结论
public static void main(String[] args) {//创建对象并指定元素类型ObjectToolString tool new ObjectTool();tool.setObj(new String(asdfghjkl));String s tool.getObj();System.out.println(s);//创建对象并指定元素类型ObjectToolInteger objectTool new ObjectTool();/*** 如果我在这个对象里传入的是String类型的,它在编译时期就通过不了了.*///objectTool.setObj(asda);objectTool.setObj(10);int i objectTool.getObj();System.out.println(i);
}
}class ObjectToolT{public T obj;public T getObj() {return obj;}public void setObj(T obj) {this.obj obj;}
}