zoukankan      html  css  js  c++  java
  • 4.21Java泛型符号"<>"里面放参数

    4.21Java泛型---符号"<>"里面放参数

    泛型的建立时间

    泛型是JDK1.5以后增加的,可以帮助我们建立lexicon安全的集合---容器想让与大桶,什么都可以往里放,但是取出的时候就很困难

    好处:

    • 帮助我们建立类型安全的容器和集合

    泛型的比喻

    容器上贴标签,容器是桶。标签限定了该容器能存放的东西,,放进去的东西全都符合标签的定义

    泛型的本质---一个标签、占位符

    本质:

    • 数据类型的参数化

    把"泛型"理解为数据类型的一个占位符(形参),告诉编译器,在调用泛型时必须传入实际类型

    泛型的处理是在编译器阶段,编译器帮助我们处理泛型

    实例:

    package com.collection;

    import java.io.IOException;
    import java.util.Arrays;

    /**
    * 测试泛型
    * @author Lucifer
    */
    public class TestGeneric {
       public static void main(String[] args) {
           MyCollection<String> mc = new MyCollection<String>(); //JDK1.7以后后面的构造器可以不加
           /*
           下面的泛型里面的字母"E"相当于形参
           上面建对象的时候定义的<String>泛型值是实参
           在下面方法使用的时候可以不写Object,可以写E
           这个实际参数定义了后面的返回值类型
            */
           try {

               mc.set("Lucifer",0);
    //           mc.set(8888,1); //因为定义了实参类型,所以这个传的时候报错了
               System.out.println("Successfully");
    //           Integer a = (Integer) mc.get(1); //因为是Integer类型,get方法中的元素都是Object类型所以要强制转型
    //           String b = (String) mc.get(0); //这个也要转型,因为数组里面的元素属性是Object类型
               String b = mc.get(0); //返回值是String类型
               /*
               加了泛型定义了<String>以后这一步就不用强制转型了
                */
    //           System.out.println(a);
               System.out.println(b);

          }catch (Exception e){
               e.printStackTrace();
          }
      }
    }

    /*定义一个类*/
    class MyCollection<E>{

       //加了泛型以后上面创建对象一环警告了---说明我们在建对象的时候后面要跟一个实际类型,在构造器后面也要加
       /*定义一个object数组*/
       Object[] objs = new Object[5];

       /*封装往数组里面插入对象的方法*/
       public void set(E obj, int index) throws Exception {
           if (index < objs.length && index >= 0){
               objs[index] = obj;
          }
      }
       /*
       形参是:
       对象
       对应的索引下标
       第一次这里的判断是index>0有问题,因为索引从0开始
       通过"<>"添加泛型,里面可以写参数名---自定义泛型
       一般情况使用的是T,E,V三个字母
        */

       /*获得的方法*/
       public E get(int index){
           return (E) objs[index]; //又因为objs对象是Object类型,所以要强转一下
      }
    }
    /*
    泛型的好处:
    1.加了泛型以后相当于提前把类型检查的工作写到了编译器里面
    2.让程序更加稳定,可读性更强
    后面的容器和其他类的时候后面会经常看到泛型符号,<>里面代表的就是后期传进来的数据的内容
    */

     

    It's a lonely road!!!
  • 相关阅读:
    比尔盖茨,乔布斯,扎克伯格,Linus 等巨佬的办公桌
    快速从 Windows 切换到 Linux 环境
    海外开发者账号上架总结
    Chrome 浏览器对标签进行整理和分组的功能太棒了!
    最受嵌入式软件工程师青睐的系统
    我最喜欢的云 IDE 有哪些?
    前端zip包下载
    el-upload上传组件(隐藏上传按钮/隐藏文件删除标记)
    滚动条样式
    使用ul标签制作简单的菜单(vue模板)
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14686573.html
Copyright © 2011-2022 走看看