泛型
一、使用泛型实现编译时检查类型:
例:向List集合中添加元素。且指定添加的元素类型为String:
1 import java.util.ArrayList; 2 import java.util.List; 3 4 public class Test { 5 public static void main(String args[]){ 6 List<String> L=new ArrayList(); 7 L.add("hh"); 8 //L.add(9);添加整型编译不通过 9 } 10 11 }
二、允许在定义类、接口、方法时使用类型形参,而这个类型形参可以在声明变量、创建对象、调用方法时动态的指定。
1 public class Apple<T> { 2 private T info; 3 public Apple(){}; 4 public Apple(T info){ 5 this.info=info; 6 } 7 public T get_Info(){ 8 return this.info; 9 } 10 public void set_Info(T info){ 11 this.info=info; 12 } 13 public static void main(String args[]){ 14 Apple<String> a1=new Apple<>(); 15 a1.set_Info("苹果"); 16 System.out.println(a1.get_Info()); 17 Apple<Integer> a2=new Apple<>(5); 18 System.out.println(a2.get_Info()); 19 } 20 21 }
注:从泛型类派生子类的时候,子类extends 父类 后面不能带形参,要么指定,要么不写<>,不存在“泛型类”。指定形参后,重写父类方法时,要与父类方法的返回值一样。
public class A1 extends Apple<String>{
public String get_info(){
System.out.println("子类重写父类的方法");
return super.get_Info();
}
}
三、在使用泛型类时,应该指定实参,但是如果没有指定参数,编辑器就会出错,这时可以使用类型通配符,形如<?>
1 public static void test(Apple<?> t){ 2 System.out.println(t.getClass()); 3 }
public static void main(String args[]){
// Apple<String> a1=new Apple<>();
// a1.set_Info("苹果");
// System.out.println(a1.get_Info());
// Apple<Integer> a2=new Apple<>(5);
// System.out.println(a2.get_Info());
Apple<String> str=new Apple<>();
test(str);
}
四、设定类型通配符上限,例: List<String> str 表示元素类型是String 类型的List集合;
List<?> list表示所有类型的List集合;
List<?extends Tree> str 表示所有Tree泛型的List,也就是说传入的实参应该是Tree或者其子类。
五、泛型方法
浙公网安备 33010602011771号