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!!!
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号