Java泛型(浅显认识)

是什么

做什么

怎么做


传智博客补充材料

http://www.cnblogs.com/lwbqqyumidi/p/3837629.html

public class GenericTest {


    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("qqyumidi");
        list.add("corn");
        list.add(100);


        for (int i = 0; i < list.size(); i++) {
            String name = (String) list.get(i); // 1
            System.out.println("name:" + name);
        }
    }
}

定义了一个List类型的集合,先向其中加入了两个字符串类型的值,随后加入一个Integer类型的值。这是完全允许的,因为此时list默认的类型为Object类型。在之后的循环中,由于忘记了之前在list中也加入了Integer类型的值或其他编码原因,很容易出现类似于//1中的错误。因为编译阶段正常,而运行时会出现“java.lang.ClassCastException”异常。因此,导致此类错误编码过程中不易发现。

 在如上的编码过程中,我们发现主要存在两个问题:

1.当我们将一个对象放入集合中,集合不会记住此对象的类型,当再次从集合中取出此对象时,该对象的编译类型变成了Object类型,但其运行时类型任然为其本身类型。

2.因此,//1处取出集合元素时需要人为的强制类型转化到具体的目标类型,且很容易出现“java.lang.ClassCastException”异常。(类型转化异常)

public class GenericTest {


    public static void main(String[] args) {
        /*
        List list = new ArrayList();
        list.add("qqyumidi");
        list.add("corn");
        list.add(100);
        */


        List<String> list = new ArrayList<String>();
        list.add("qqyumidi");
        list.add("corn");
        //list.add(100);   // 1  提示编译错误


        for (int i = 0; i < list.size(); i++) {
            String name = list.get(i); // 2
            System.out.println("name:" + name);
        }
    }
}

采用泛型写法后,在//1处想加入一个Integer类型的对象时会出现编译错误,通过List<String>,直接限定了list集合中只能含有String类型的元素,从而在//2处无须进行强制类型转换,因为此时,集合能够记住元素的类型信息,编译器已经能够确认它是String类型了。

使用泛型的还有一个好处是,不用强制类型转换了哦


1.集合中为什么没有泛型的时候需要强制类型转换

因为集合的添加 函数的参数是 object 的 所有的对象都可以添加进去 因为所有的类都是obejct的子类

因为你放进去的是object 取出来的自然也是object object 要转换成原来的类型自然要强转

2.集合使用泛型

通过List<String>,直接限定了list集合中只能含有String类型的元素

3.Java中集合框架,他们是如何存放一个对象的,他的原理是什么样子的。

a.看JDK集合类源代码

b.其实java的集合框架可以理解为数据结构,它的内容主要是栈、队列、Hash表的内容,所以java集合框架中对象的存在就是利用这些算法的原理存放的,你如果学习过《数据结构》一书

c.集合里存放的都是对象的地址  指向对象的引用变量

对象都是引用类型的,一个对象生成就会在堆内存开辟一个空间,其它的对象在包含它的时候就是只用保存该引用,当使用的时候就根据引用找到该对象在堆内存中的位置。

4.为什么强制类型转换会发生错误

      向上转型和向下转型

http://www.cnblogs.com/gold-worker/archive/2012/09/26/2704717.html


一、什么是泛型

泛型即“参数化类型”,

如何理解呢?((固定)Java中有基本类型8种,复杂类型有数组,String ,还有类类型)

                举例:

                           ((固定) 访问修饰符  返回值类型  方法名(参数列表){}  访问修饰符4种:public private protect (需补充))

                            public int add(int a,int b){
                                    int sum;

                                   sum = a+b;*

                                   return sum;

                           }

              泛型就是那个a  例如(不合语法)

                         public void add( E,T){

                                     sum = E+T;

                         }

             形参是E,T   实参传过来是什么方法体内部就是什么类型

二、泛型的使用:接口,类,方法

三、本次发现的问题:

        向上向下转型

        


                         

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值