泛型

一、使用泛型实现编译时检查类型:

例:向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或者其子类。

五、泛型方法

posted on 2016-04-25 12:58  笑傲江湖未平生  阅读(167)  评论(0)    收藏  举报