> 文档中心 > 《Java 核心技术 卷1》 笔记 第12章 泛型程序设计(3) 翻译泛型表达式+遗留代码警告处理

《Java 核心技术 卷1》 笔记 第12章 泛型程序设计(3) 翻译泛型表达式+遗留代码警告处理


 12.5.1 翻译泛型表达式

返回值为泛型时,相当于获取类型为Object,然后再进行一次强制类型转换

mm.getKey().getTime() 它进行了什么操作呢?

🍨 (1)取出返回值 Pair

🌮 (2)取出 key,类型为 Object

🥗 (3)强制类型转换为 GregorianCalendar

🍟 (4)调用 GregorianCalendar getTime 方法

使用 javap 命令验证:

果然 getKey() 之后进行了类型转换

 12.5.2 翻译泛型方法

桥方法:子类形参范围比父类形参范围小

❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤

import java.io.*;import java.util.*;import java.util.logging.Logger; public class Main {    public static void main(String[] args) throws IOException { DataInterval interval = new DataInterval(); interval.setFirst(new Date()); Pair pair = interval; pair.setSecond(new Date());    } } class Pair{    private T first;    private T second;    protected Logger log = Logger.getGlobal();    public Pair(T first, T second){ this.first = first; this.second = second;    }     public Pair(){}     public T getFirst() { return first;    }     public void setFirst(T first) { this.first = first;    }     public T getSecond() { return second;    }     public void setSecond(T second) { log.info("Pair.setSecond"); this.second = second;    }} class DataInterval extends Pair{    @Override    public void setSecond(Date second){ log.info("DataInterval.setSecond"); if(second.compareTo(getFirst())>=0){     super.setSecond(second); }    }}

❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤

结果:

🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍

🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍

这个用法是允许的,相当于父类 setSecond(Object second),子类覆盖这个方法,形参范围变为 setSecond(Date date),  Date Object 的子类,所以这个用法不会出错。虚拟机会根据需要找到更为合适的方法。

 12.5.3 调用遗留代码

测试代码:

❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤

import javax.swing.*;import java.awt.*;import java.io.*;import java.util.*; public class Main {    public static void main(String[] args) throws IOException {  Dictionary labelTable = new Hashtable(); labelTable.put(0,new JLabel(new ImageIcon("a.gif"))); labelTable.put(20,new JLabel(new ImageIcon("a.gif"))); JSlider s = new JSlider(); s.setLabelTable(labelTable);  Dictionary lt = s.getLabelTable();    } }

❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤

效果如下:

🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍

🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍

我们发现,没有定义泛型的的集合类存放数据,或者将没泛型的数据赋值到有泛型的数据时,会产生警告。实际运行后,确认代码是没问题的,可以用注解@SuppressWarnings("unchecked") 屏蔽警告:

🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍

🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍

注意:使用 @SuppressWarnings("unchecked") 虽然可以屏蔽警告,但是其他方法中期望有警告的内容也会丢失,建议把需要抑制警告的内容,单独放在一个方法中进行处理。

相关内容:选择 《Java核心技术 卷1》查找相关笔记

评论🌹点赞👍收藏✨关注👀,是送给作者最好的礼物,愿我们共同学习,一起进步

如果对作者发布的内容感兴趣,可点击下方关注公众号 钰娘娘知识汇总 查看更多作者文章哦!

全民K歌