码迷,mamicode.com
首页 > 编程语言 > 详细

java泛型

时间:2016-05-19 19:34:55      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:java泛型

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;

public class FanXing {

    @Test
    public void test1() {
        List<String> arrayList1 = new ArrayList<String>();
        arrayList1.add("abc");
        List<Integer> arrayList2 = new ArrayList<Integer>();
        arrayList2.add(123);
        System.err.println(arrayList1.getClass() == arrayList2.getClass());
        
//        我们定义了两个ArrayList数组,不过一个是ArrayList<String>泛型类型,只能存储字符串。
//         一个是ArrayList<Integer>泛型类型,只能存储整形。
//         最后,我们通过arrayList1对象和arrayList2对象的getClass方法获取它们的类的信息,
//         最后发现结果为true。说明泛型类型String和Integer都被擦除掉了,只剩下了原始类型。 
        
    }
    
    //关于泛型变量的使用,是会在编译之前检查的。
    @Test
    public void test2(){
        try {
            List<Integer> arrayList3 = new ArrayList<Integer>();
            arrayList3.add(1);// 这样调用add方法只能存储整形,因为泛型类型的实例为Integer
            //arrayList3.getClass().getMethod("add", Object.class).invoke(arrayList3, "asd");
            Method method=arrayList3.getClass().getMethod("add", Object.class);
            method.invoke(arrayList3, "asdf");
            
            for (int i = 0; i < arrayList3.size(); i++) {
                System.err.println("第"+i+"个元素==="+arrayList3.get(i));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }
    
    @Test
    public void test3(){
        ArrayList<String> arrayList1 = new ArrayList();
        arrayList1.add("1");// 编译通过
        //arrayList1.add(1);// 编译错误
        String str1 = arrayList1.get(0);// 返回类型就是String

        ArrayList arrayList2 = new ArrayList<String>();
        arrayList2.add("1");// 编译通过
        arrayList2.add(1);// 编译通过
        Object object = arrayList2.get(0);// 返回类型就是Object

        new ArrayList<String>().add("11");// 编译通过
        //new ArrayList<String>().add(22);// 编译错误
        String string = new ArrayList<String>().get(0);//返回类型就是String  
        //类型检查就是针对引用的,谁是一个引用,用这个引用调用泛型方法,就会对这个引用调用的方法进行类型检测,而无关它真正引用的对象。
    }
}

本文出自 “w51spring” 博客,请务必保留此出处http://w51spring.blog.51cto.com/7524892/1775082

java泛型

标签:java泛型

原文地址:http://w51spring.blog.51cto.com/7524892/1775082

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!