• JAVA-初步认识-常用对象API(集合框架-泛型-概述)


    一.

    学习一下,使用集合过程中,所涉及的JDK1.5以后所发生的技术,叫做泛型。可以从字面直译,广泛的类型。

    首先介绍一下泛型的由来,技术的由来是为了解决问题的。

    之前在讲述集合时,演示了很多小示例,现在在这些的基础上,阐述泛型的概念。

    例子中为什么要强转?因为add方法它的类型是object,这个方法在定义的时候是object类型,public boolean add(object obj)。object什么类型的对象都能接收进来,而且被提升为了object,取出来肯定也是object。这个说完以后,说一个特殊的现象。

    al.add(4);其实做的是al.add(new Integer(4));操作,

    结果出现了问题,强转失败。Integer不能转化为String,怎么解决这个问题?

    有人说要判断,但是里面有很多类型,挨个判断不合适。还有,如果指定的参数al的集合是别人传递来的,那根本就无法进行判断,人家往里面装什么了,我们不知道。下面就要解决这个问题。先交代一下,之前是怎么解决的。之前的方式很简单,由程序员主观控制。什么叫主观控制,跟你讲里面要存,必须存储同一类型的,要么都是String,要么都是Integer。这带来了一些隐患,编译没事,运行出事了,用户那边存储的出了问题,他不清楚类型是什么,出了问题没法解决。因此,后期1.5以后提供了一些解决方案。

    它的解决思想和数组是一致。

     现在就数组讲述一下,写成9是可以的,写成9.0是否可以呢? 有人说不行,定义的数组是int类型,而9.0是浮点型。数组也是容器,在声明时就确定了里面元素的类型,必须是int。写成9.0是不可以的。基于这点,al也是容器,为了避免后期出现安全隐患,在定义容器的时候,就明确里面装什么类型的元素。

    那么该怎么修改程序。

    由于是要定义集合,那么在定义时要明确一下,集合中要存储什么类型的元素。书写格式如下,

    回过头来看上面就知道为什么出错了,4的类型不对,编译时出错。

    编译的时候,会检测类型。因为java是强类型语言,它对每一个数据都确定了具体的类型,只要不匹配,立马编译失败。不用到运行那步,编译时期就失败了。

    集合中确定了元素类型为String,那么来自集合的迭代器也要交代其取出的元素是什么类型。最终,it.next前面不需要进行强转了,因为类型已经明确好了。

    修改完整的程序如下,

    这个集合中指定的类型就是泛型,对操作的类型进行指定。

    泛型的出现是解决问题的,integer在1.5以后出现的自动装箱拆箱是解决简化问题的。在1.5出现一个安全机制,或者叫安全新特性,这是为了提高安全性而出现的。简化书写,提高效率,提高安全性。

    那么,尖括号到底什么时候用?现在先说已有的情况,然后再说自定义的情况。

    尖括号是用来接收类型的,比如说之前学习到了utill包中的arraylist,它后面就有尖括号,E是指参数。

    有人说,一个参数写成e就可以,至于写成E么。这里接收的都是引用数据类型,引用数据类型不是类就是接口,或者数组。类或接口首字母大写。

    E是参数,我们不知道ArrayList中要装入什么参数,所以我们这边提供一个类型变量,要用什么往里面传递就好了。

    早期没泛型的情况下,是object。(泛型可能就是指未知参数)所以,它有一个自动类型提升,就是向上转型,取的时候,还要向下转型。这就是我们说的强制转换。

    目前介绍了泛型的尖括号基本使用说了一下。接口也是一样,如下图所示。

    看下图,API中写成e1,e2的形式,是说e1是用来接收类型的,在具体使用中会交代的。只要看大尖括号,就往里面传递类型。

  • 相关阅读:
    Java中变量的使用规则
    Java中的数据类型
    如何命名Java变量
    thinkphp3.2 验证码生成和点击刷新验证码
    workerman
    jorgchart,帮助你生成组织结构图的
    PHP代码获取客户端IP地址经纬度及所在城市
    百度API城市代码CityCode官方文档
    自定义过滤器
    内置过滤器
  • 原文地址:https://www.cnblogs.com/wsw-bk/p/8321922.html
Copyright © 2020-2023  润新知