文章转载:http://www.jianshu.com/p/95f349258afb
1.泛型的目的是避免强制转换:
//定义泛型BOX
public class BOX<T>(){
private T object;
public void set(T object){
this.obeject = object;
}
public T get(){
return object;
}
}
BOX box = new BOX<Apple>();//使用泛型
box.set(apple);
Apple apple = box.get();//避免强制转换
- 泛型通配符T E K V的区别
这些全都属于java泛型的通配符,刚开始我看到这么多通配符,一下晕了,这几个其实没什么区别,只不过是一个约定好的代码,也就是说
使用大写字母A,B,C,D......X,Y,Z定义的,就都是泛型,把T换成A也一样,这里T只是名字上的意义而已
? 表示不确定的java类型
T (type) 表示具体的一个java类型
K V (key value) 分别代表java键值中的Key Value
E (element) 代表Element
eg.
//eg1.
public class Test<T> {
public List<T> list = new ArrayList<T>();
public static void main(String[] args) {
Test<String> test = new Test<String>();
test.list.add("hello");
System.out.println(test.list);
}}
//eg2.
public class Test<A> {
public List<A> list = new ArrayList<A>();
public static void main(String[] args) {
Test<String> test = new Test<String>();
test.list.add("hello");
System.out.println(test.list);
}}
eg1 与 eg2本质上一样的,因为Type,所以我们都用T
如果要定义多个泛型参数,比如说两个泛型参数
很典型的一个栗子是Map的key,value泛型,我们也可以定义一个这样的
public interface Mymap<K,V>{
public K getkey();
public V getvalue();
}
public class MymapImpl implements Mymap{
private K key;
private V value;
public MymapImpl(K key,V value){
this.key = key;
this.value = value;
}
public K getkey(){
return key;
}
public V getvalue(){
return value;
}
}
现在可以随意使用
MymapImpl<String,Integer> map1 = new MymapImpl<String,Integer>("string",1);
MymapImpl<String,String> map2 = enw MymapImpl<String,String>("string","string");
- 接下来说说List,List,List
这里写代码片