泛型

泛型的本质就是“数据类型的参数化”。 可以把“泛型”理解为数据类型的一个占位符(形式参数),即告诉编译器,在调用泛型时必须传入实际类型。

public class FanXing01 {
    public static void main(String[] args) {
        //<String>表示泛型类型为String(类似实参),只接受String类型的参数
        Meth<String> meth=new Meth<>();
        meth.setMeth("gakki",0);
        meth.setMeth("yui",1);
        meth.setMeth("Ara",2);
        String str=meth.getMeth(0);
        System.out.println(str);
    }
}
class Meth<E>{//此处加入了一个泛型(类似形参,未知的数据类型)
    Object[] obj=new Object[5];
    public void setMeth(E e,int index){
        obj[index]=e;
    }
    public E getMeth(int index){
        return (E) obj[index];
    }
}

 

泛型类型变量不能是基本数据类型。

就比如,没有ArrayList<double>,只有ArrayList<Double>。因为当类型擦除后,ArrayList的原始类中的类型变量(T)替换为Object,但Object类型不能存储double值。

 

泛型在静态方法和静态类中的问题

泛型类中的静态方法和静态变量不可以使用泛型类所声明的泛型类型参数。

public class Test2<T> {    
    public static T one;   //编译错误    
    public static  T show(T one){ //编译错误    
        return null;    
    }    
}  

因为泛型类中的泛型参数的实例化是在定义泛型类型对象(例如ArrayList<Integer>)的时候指定的,而静态变量和静态方法不需要使用对象来调用。对象都没有创建,如何确定这个泛型参数是何种类型,所以当然是错误的。

public class Test2<T> {    
    public static <T>T show(T one){//这是正确的    
        return null;    
    }    
}  
public class Test06<Integer> {
    static int a=10;
    //static Integer a=10; 编译错误
    static <Integer>Integer show(Integer b){
        return b;
    }
}

因为这是一个泛型方法,在泛型方法中使用的T是自己在方法中定义的T,而不是泛型类中的T。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值