Java泛型通配符T E K V 的区别,以及 class<T> 与 class<?>的区别
2017-07-29 00:34
656 查看
文章转载:http://www.jianshu.com/p/95f349258afb
1.泛型的目的是避免强制转换:
泛型通配符T E K V的区别
这些全都属于java泛型的通配符,刚开始我看到这么多通配符,一下晕了,这几个其实没什么区别,只不过是一个约定好的代码,也就是说
eg.
eg1 与 eg2本质上一样的,因为Type,所以我们都用T
如果要定义多个泛型参数,比如说两个泛型参数
很典型的一个栗子是Map的key,value泛型,我们也可以定义一个这样的
现在可以随意使用
接下来说说List,List,List
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
这里写代码片
相关文章推荐
- JAVA泛型通配符T,E,K,V区别,T以及Class<T>,Class<?>的区别
- JAVA泛型通配符T,E,K,V区别,T以及Class<T>,Class<?>的区别
- C# 中 Struct 与 Class 的区别,以及两者的适用场合<转转转>
- 泛型TEKV区别以及class<T>
- <iostream.h>和<iostream>的区别,以及using namespace等
- List<?>和List<T>的区别?以及List 和List<Object>的关系
- class<T>和 class<?>类型 有什么区别
- class<T>和 class<?>类型 有什么区别
- <T extends Comparable<? super T>>泛型类型与<T extends Comparable<T>>的区别以及优越性
- #include< > 和 #include” ” 的区别以及绝对地址引用\\以及cvLoadImage和imread
- Java泛型中<? extends E>和<? super E>的区别
- spring配置文件中<bean>的id和name属性区别,以及identifier和aliases
- Class<?>与Class<T>的区别
- string和char*的区别以及const_cast<>()
- Java泛型中<? extends E>和<? super E>的区别
- Java中泛型T和Class<T>以及Class<?>的理解(转)
- 总结:#import和#include区别 #import和@class的区别 #import<>和#import""的区别
- 选择器(标签,class,id,子,后代,通用,伪类,分组)区别,继承,<link>
- Class<Object>与Class<?>的区别
- java泛型中<?>和<T>有什么区别