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

文章转载:http://www.jianshu.com/p/95f349258afb

1.泛型的目的是避免强制转换:


//定义泛型BOX
public class BOX(){
    private T object;
    public void set(T object){
        this.obeject = object;
    }
    public T get(){
        return object;
    }
}

BOX box = new BOX();//使用泛型
box.set(apple);
Apple apple = box.get();//避免强制转换
  1. 泛型通配符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 {    
  public List list = new ArrayList();   
  public static void main(String[] args) {
        Test test = new Test();
        test.list.add("hello");
        System.out.println(test.list);
    }}
 //eg2.
public class Test {    
  public List list = new ArrayList();   
  public static void main(String[] args) {
        Test test = new Test();
        test.list.add("hello");
        System.out.println(test.list);
    }}

eg1 与 eg2本质上一样的,因为Type,所以我们都用T

如果要定义多个泛型参数,比如说两个泛型参数
很典型的一个栗子是Map的key,value泛型,我们也可以定义一个这样的

public interface Mymap{
    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");
  1. 接下来说说List,List,List
这里写代码片

你可能感兴趣的:(Java泛型通配符T E K V 的区别,以及 class 与 class的区别)