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

文章转载: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();//避免强制转换
  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<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");
  1. 接下来说说List,List,List
这里写代码片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值