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!!!
原文地址:https://www.cnblogs.com/JunkingBoy/p/14686573.html