您的位置:首页 > 编程语言 > Java开发

Java泛型通配符T E K V 的区别,以及 class<T> 与 class<?>的区别

2017-07-29 00:34 656 查看
文章转载: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

这里写代码片
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: