1.软文推荐

2.软文推荐

3.软文推荐

泛型信息只存在于代码编译阶段,但是在java的运行期(已经生成字节码文件后)与泛型相关的信息会被擦除掉,专业术语叫做类型擦除。

今天我们来讲解泛型中另一个重要知识点——泛型擦除!

十分钟理解Java泛型擦除十分钟理解Java泛型擦除

泛型擦除概念

泛型信息只存在于代码编译阶段,但是在java的运行期(已经生成字节码文件后)与泛型相关的信息会被擦除掉,专业术语叫做类型擦除。我们来看一个例子:

ArrayList l1 = new ArrayList();
ArrayList l2 = new ArrayList();  
System.out.println(l1.getClass()==l2.getClass());

运行代码,结果为True

这是因为ArrayList 和ArrayList 在 jvm 中的 Class 都是 List.class,二者在 jvm 中等同于List

利用类型擦除干“坏事儿”

大家都知道,下面这段代码l.add(123)无法编译通过,因为123不是String类型,这也是使用泛型的好处之一。

ArrayList l=new ArrayList();

l.add("abc");

l.add(123);

但是我们理解了泛型擦除的原理,我们可以巧妙地利用这个原理结合反射知识干一些“坏事”,例如:

ArrayListl=new ArrayList();
    l.add("abc");    
    try {
      Method method = l.getClass().getDeclaredMethod("add",Object.class);
      method.invoke(l,"test");
      method.invoke(l,100.f);
    }catch (Exception e) {
      e.printStackTrace();
    }
    System.out.println("list的大小是:"+l.size());  
    for ( Object o: l){
      System.out.println(o);
    }

运行结果是:

list的大小是:3
abc
test
100.0(被成功插入到ArrayList中)

我们可以看见100.0 成功地插入到ArrayList 中了,所以利用类型擦除的原理并结合反射的手段就绕过了正常开发中编译器不允许的操作限制。

通俗的理解

我们可以将泛型比作是一个看守,他来守护我们的代码安全,然后设置各项规定,“xxx 禁止出入”的提醒。而现实生活中,也总会有些人能够基于对门卫们生活作息的规律,绕开他们的监视(反射结合泛型擦除)来干一些坏事儿 。

本文来源:www.lxlinux.net/5373.html,若引用不当,请联系修改。

相关文章 8

1

阿里云邮箱如何注册?阿里巴巴邮箱怎么注册?(阿里云邮箱如何注册) 2分钟前

阿里云邮箱如何注册? 邮箱行业不断发展与进步,这项工具开始广泛的应用在我们的工作与生活之中。例如生活中使用163NET邮箱,工作时使...

2

网站收录需要多长时间?(网站收录需要多久) 2分钟前

网站上线后,首页url建议提交到各个搜索引擎的站长平台,加快收录。 ① 保持高频率输出,日均更新3篇内容左右; ② 获得行业权威且垂直...

3

云服务器和云主机区别是什么?其实就是一个意思!(云服务器和云主机有啥用) 4分钟前

云服务器和云主机区别:云服务器和云主机有什么区别 ?云服务器和云主机之间没有区别。从云服务提供商和购买云服务器的用户的角度来...

4

destoon怎么限制标题长度?title怎么显示全部标题(destoon不授权可以吗) 6分钟前

如果产品的标题调用出来后,可是标题的字符长度太长了,destoon怎么怎么限制标题长度呢?destoon7.0的搜索页面模块的标题太长,是搜索标题...

5

【618】LOCVPS:KVM全场7折优惠,充618元送150元,CN2线路 8分钟前

LOCVPS算是国内比较知名的IDC商家,由知名大佬K总开设,信誉和技术上都非常好,另外商家针对滥用也比较严格,这样对于用来做站的朋友是...

6

#双12促销#racknerd洛杉矶MC机房 CN2线路美国VPS 年付14刀 半专用服务器五折 10分钟前

RackNerd是一家主要从事美国vps、美国服务器租赁的商家,主打洛杉矶LayerHost数据中心和洛杉矶multacom数据中心vps服务器产品,支持支付宝、...

7

傲游主机:8折长期优惠码,有香港原生IP和日本原生IP,中国香港荃湾CN2机房和日本大阪机 12分钟前

傲游主机怎么样? 傲游主机是一家成立于2010年的老牌国外VPS服务商,在澳大利亚及美国均注册公司,是由在澳洲留学的害羞哥、主机论坛知...

8

讲解一下RHEL7 运行级别以及切换方法 15分钟前

大家都知道 Windows 有安全模式,它是Windows的最小模式,和普通模式相比,安全模式可以让用户更好地进行系统检测以及错误修复。Linux 的运...