代码精进之路
范学雷
前 Oracle 首席软件工程师,Java SE 安全组成员,OpenJDK 评审成员
38234 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
结束语 (1讲)
代码精进之路
15
15
1.0x
00:00/00:00
登录|注册

09 | 怎么用好Java注解?

注明计划删除的版本号
在规范描述中说明废弃的原因以及替代的办法
在声明中使用Deprecated注解
父类更改方法,子类编译出错
清楚地标明方法是重写的
尽可能消除相关的警告
不要轻易使用
尽快转换、使用替换的方法
使用Deprecated注解
判断重写方法和父类规范的定义有没有冲突和抵触
重写方法应该加上Override注解
使用Override注解
功能也很强大
Java的注解非常丰富
废弃的接口,不要使用
过时的接口,尽早废弃
重写的方法,总是使用
不推荐使用的注解SuppressWarnings
废弃接口的处理
废弃不合理的设计,拥抱更新的思想
重写方法可以不遵守父类方法的规范
识别子类的方法是否是重写方法
可以为代码添加标签信息
类似于给代码贴个标签
Java注解是Java 1.5引入的一个工具
一起来动手
小结
在废弃退役接口的情况下,如何使用注解?
在声明继承关系中,Java注解该如何使用?
什么是Java注解
怎么用好Java注解?

该思维导图由 AI 生成,仅供参考

如果你使用面向对象的概念和技术有一段时间了,不知道你会不会有这样的困惑: 面向对象技术带来的麻烦,一点都不比它带来的好处少!
比如说,我们辛辛苦苦继承了一个类,重写了它的方法。过几天,这个类居然修改了它的接口,而且没人通知我们。然后,我们写的子类还可以美滋滋地编译,运行,就是总出错误,怎么调试都没发现这个子类的实现有什么不妥。直到有人说,父类变了!这时候,我们就想找杯咖啡暖暖手,一个人静静。
面向对象技术确实有它值得傲娇的地方。但是,只有把类似上面的小麻烦解决掉,它的使用才更合理。 比如说,父类做了修改,能不能立即就通知我? 别等到问题出现了,我们还被蒙在鼓里。
Java 注解就可以帮助我们。

什么是 Java 注解

Java 注解是 Java 1.5 引入的一个工具,类似于给代码贴个标签,通过注解可以为代码添加标签信息。这些标签信息可以添加在字段、方法和类上。开发工具、部署工具或者运行类库,可以对这些标签信息进行特殊的处理,从而获得更丰富的功能。
经过十多年的发展,注解已经成了 Java 生态系统一个非常重要的技术。使用注解可以大幅度降低我们的开发强度,提高工作效率,减少潜在的错误。像 Java 类库一样,注解也有了越来越丰富的定义和规范,成了我们需要掌握的重要技术之一。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Java注解是Java 1.5引入的重要工具,类似于为代码贴上标签,能够为代码添加标签信息,提高代码的可读性和可维护性。本文主要讨论了在声明继承关系中,Java注解的合理使用,具体涉及了Override、Deprecated、SuppressWarnings这三个注解的使用。其中,Override注解可以帮助识别子类的重写方法,清晰标明方法是重写的,同时在父类方法更改时能及时通知子类。另外,文章还提到了重写方法可能不遵守父类方法规范的问题,强调了重写方法应该遵守父类定义的规范,如果需要改变规范,应明确标明并注明潜在的后果。此外,文章还探讨了废弃接口的问题,强调了废弃的接口不应该继续使用,并介绍了使用Deprecated注解和SuppressWarnings注解的情况。总的来说,本文通过讨论Java注解的合理使用和废弃接口的处理,为读者提供了在面向对象编程中提高代码质量和管理继承关系的实用建议。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《代码精进之路》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(23)

  • 最新
  • 精选
  • hua168
    老师,问3个很重要的题外问题: 1. 大专学历,想直接自学考本科或研究生,自考学历中大型公司承认的吗? 2. 大公司对年龄有限制的吗? 3. 30多岁,运维(编程自学java一年,没项目经验),只有小公司工作经验,技术一般,发展方向是什么?很多IT公司好像都不要年龄大点的~~人生80,那不是40岁就没得工作了?

    作者回复: 人生三十,学历的分量应该比重不大了。国内的部分大公司,年龄是个考量的因素,但是也就是众多因素中的一个因素。如果把劳动力看成一个理性的市场,重要的是我们有什么可以拿来交换的。 我有一个朋友,认识他的人都特别佩服,他曾经兼顾过一段时间的非常枯燥无聊、看起来也没什么技术含量的工作。 过了几年,当他把工作转交给下一个人时,他已经把这项工作做的像一个艺术了。他做了大量的自动化,看起来非常枯燥无聊的事情,被他搞的很有趣,自动化后,根本就占用不了他多长时间。 软件是一个复杂的系统,需要各种各样的人才,有能研发的,有能测试的,有能运维的,有能运营的。每种都需要不同的技能。再厉害的研发也不一定做得了测试,也不一定做得了运维。 把你手头的工作做出花来,这就是我们值钱的地方。 怎么才能做出花来呢? 这个你的领导不知道,你的公司可能也不知道,所以大概率没有人能够教你怎么做。你得自己去从工作中发现现实的问题,找到具体的解决办法。多看看新的技术,想一想能不能用到你的工作环境中去。 你可能看到100个技术,只有一个能用。 一个能用,这就行了。你要是不看100个,可能没有办法找到这一个。 运维就是一个涉及到很多复杂知识的岗位,它的复杂度一点都不必软件开发简单。 但是,的确也有的运维就是看几台机器。但是,既然是你做运维,你可以自己定义运维该怎么做最好。 不管时哪一个岗位,如果做到一定程度,年龄从来都不是真正的问题。很多岗位,年龄都是优势,而不是问题,因为没有积年累月的积累,我们成不了一个领域最专业的人。成为问题的,是我们40岁了,水平还停留在20到30岁的阶段。 Stay Hungry, Stay Foolish!

    2019-01-23
    2
    52
  • 大白给小白讲故事
    lombok插件的很多实用的注解 @Data 使用在类上,该注解会提供getter、setter、equals、canEqual、hashCode、toString方法。 @NonNull 该注解使用在属性上,该注解用于属的非空检查,当放在setter方法的字段上,将生成一个空检查,如果为空,则抛出NullPointerException。 @AllArgsConstructor 该注解使用在类上,该注解提供一个全参数的构造方法,默认不提供无参构造。 @NoArgsConstructor 该注解使用在类上,该注解提供一个无参构造。 等等

    作者回复: 学习了,我还不知道这个插件。注解真的非常强大!

    2019-01-24
    16
  • 卞雪达
    哈哈哈,最常用的注解,现在都成Spring的@Autowired啦,还有Spring的各种注解,给我的感觉,Spring使用多了,都是注解编程啦,我参数检验都用注解完成。我也会写自己的注解,我刚刚还完成了一个@Excel,我这是个Web的项目,有的接口产生的数据,可能会被导出成Excel,我捣鼓了几波,终于弄了一个注解,放在controller层的方法上,让那种简单的回List的接口,可以直接导出成Excel(配合下http参数),我遇到比较大的麻烦,是我之前设计了一个@Page的注解,注在Service层方法上,帮助开启数据库分页(也要配合http参数,且是一个方法查一次数据的那种),而@Excel跟它有个比较大的冲突:@Page是要分页,@Excel是不要分页。用户肯定是查询的时候看到分页接口,导出的时候拿到全部结果,我得想办法通知一下@Page,我最开始尝试给@Page里面的default方法弄个参数,然后改这个值,后来发现这个值竟然不是每个线程独有的,而是唯一的,也就是改了大家全都改,后来想了想,大概是因为注解本质上是个接口或类似接口?最终选择了ThreadLocal来通知@Page,我已经使用了很多ThreadLoacal了,我之前用它不是很多,现在有些上瘾,又隐隐担心别有坑,比如我知道有个不remove可能有内存溢出的坑。回到注解的话题,注解编程我觉得挺帅的,@Override我也爱加,能给方法加多少注解我就加多少,感觉是一种加持,哈哈哈,不过创造、使用注解就像是创造、使用规则,得对这个规则熟悉,好多注解编译器也不能判断你是不是符合了规则,用的时候还是有些学习成本。

    作者回复: 👍 很多Java的特性,被大家用的出神入化,甚至远远超出了设计者的构想!这真的很帅啊!

    2019-05-15
    3
  • 王智
    阿里巴巴的扫描插件或许会有帮助的,在使用idea的过程中,安装了Alibaba Java Coding Guidelines之后,代码的规范等等插件就会检测出来报红,虽然可以运行,但是对于有强迫症和代码洁癖的人来说就很难受. 包括了if不写括号,继承的方法没有使用@Override注解. 对于刚刚工作的我,java中的注解用的最多的就是@Override了. 废弃方法在idea中会有横线作为标记,有这种标记的方法一律不使用. 继续加油去了.

    作者回复: 加油!

    2019-01-23
    3
  • 小成
    C++11引入了override关键字,对应Java的override. C++14引入了deprecated关键字,对应Java的deprecated.

    作者回复: 谢谢分享,这个留言对使用C++的有帮助!

    2019-01-30
    2
  • web
    题目有点大, 以为是讲怎么写注解; 内容有点水, 半个版面怎么写override

    作者回复: 😄和规范有关的注解。

    2019-01-28
    2
  • 苦行僧
    现在基本上是用静态代码检查工具扫描业务代码,jdk中的废弃方法基本替换掉

    作者回复: 赞,这是一个好习惯!

    2019-01-23
    2
  • 程龙
    老师 我想问下,接口和实现类,注解应该写在接口 上面还是实现类?

    作者回复: 要区分一下。 一般的,我们说接口是公开的interface或者class。接口的规范(注释的一种形式)要写在接口里,这样自动生成的文档,便于查阅。一般的实现类,是在内部包或者代码里。实现类的注释,是帮助理解实现类的,要贴着代码写。

    2019-04-10
    1
  • 醉侠
    老师,想知道文章里String的构造函数为什么被移除,是因为字符编码的问题吗?

    作者回复: 是字符编码的问题,这个构造函数(String​(byte[] ascii, int hibyte))没有充分的信息可以把字节(byte)转换成合适的字符(character)。

    2019-02-13
    1
  • Being
    Override对应C++就是virtual了,经常用,以前还真不太清楚为什么重写的方法要加,就觉得好区别,就保留这个习惯了,今天才意识到要避免父类删除继承方法后,能快速通过编译器定位问题。 貌似C++没有JAVA的Depraceted和SuppressWarnings类似的,我再查查确认下,Deprecated的用处挺大的,及时止损呀

    作者回复: 谢谢分享C++对应的关键字。

    2019-01-23
    1
收起评论
显示
设置
留言
23
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部