Java泛型原理、类型擦除

注意

泛型不能使用在静态属性上

泛型可以用在接口、抽象类、普通类上

泛型方法

泛型方法可以定义在非泛型类中,这个方法可以是静态方法或者成员方法;

public class Method {
    //泛型方法,是在返回类型前面加上<>
    public  static  <T> void say(T t){
        System.out.println(t);
    }
    public <T> T test(T x){//有返回值的泛型方法
        return  x;
    }
}

类型擦除(重点)

https://www.jianshu.com/p/36356dba3ee9

List<String> l1 = new ArrayList<String>();
List<Integer> l2 = new ArrayList<Integer>();
		
System.out.println(l1.getClass() == l2.getClass());//输出true,因为类型擦除,最终都是Object

泛型信息只存在于代码编译阶段,在进入 JVM 之前,与泛型相关的信息会被擦除掉,专业术语叫做类型擦除。

code 1:

}
    public static void main(String[] args) {
    Map<String, String> map = new HashMap<String, String>();
    map.put("name", "hollis");
    map.put("age", "22");
    System.out.println(map.get("name"));
    System.out.println(map.get("age"));
}

反编译后的code 1:

}
    public static void main(String[] args) {
    Map map = new HashMap();
    map.put("name", "hollis");
    map.put("age", "22");
    System.out.println((String) map.get("name"));
    System.out.println((String) map.get("age"));
}

发现泛型都不见了,程序又变回了Java泛型出现之前的写法,泛型类型都变回了原生类型,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值