@Deprecated

这个元素是用来标记过时的元素,想必大家在日常开发中经常碰到。编译器在编译阶段遇到这个注解时会发出提醒警告,告诉开发者正在调用一个过时的元素比如过时的方法、过时的类、过时的成员变量。

public class Hero {

    @Deprecated
public void say(){
System.out.println("Noting has to say!");
} public void speak(){
System.out.println("I have a dream!");
} }

备注:定义了一个 Hero 类,它有两个方法 say() 和 speak() ,其中 say() 被 @Deprecated 注解。然后我们在 IDE 中分别调用它们。

可以看到,say() 方法上面被一条直线划了一条,这其实就是编译器识别后的提醒效果

@Override

  • 帮助自己检查是否正确的复写了父类中已有的方法(自动检查父类中是否有这个方法,方法的参数是否和父类中的一致)
  • 告诉读代码的人,这是一个复写的方法

@SuppressWarnings

阻止警告的意思。被 @Deprecated 注解的方法后,编译器会警告提醒,而有时候开发者会忽略这种警告,他们可以在调用的地方通过 @SuppressWarnings 达到目的。

@SuppressWarnings("deprecation")
public void test1(){
Hero hero = new Hero();
hero.say();
hero.speak();
}

@SafeVarargs

参数安全类型注解。它的目的是提醒开发者不要用参数做一些不安全的操作,它的存在会阻止编译器产生 unchecked 这样的警告。它是在 Java 1.7 的版本中加入的。

@SafeVarargs // Not actually safe!
static void m(List<String>... stringLists) {
Object[] array = stringLists;
List<Integer> tmpList = Arrays.asList(42);
array[0] = tmpList; // Semantically invalid, but compiles without warnings
String s = stringLists[0].get(0); // Oh no, ClassCastException at runtime!
}

上面的代码中,编译阶段不会报错,但是运行时会抛出 ClassCastException 这个异常,所以它虽然告诉开发者要妥善处理,但是开发者自己还是搞砸了。

Java 官方文档说,未来的版本会授权编译器对这种不安全的操作产生错误警告。

@FunctionalInterface

函数式接口注解,这个是 Java 1.8 版本引入的新特性。函数式编程很火,所以 Java 8 也及时添加了这个特性。

函数式接口 (Functional Interface) 就是一个具有一个方法的普通接口。

比如

@FunctionalInterface
public interface Runnable {
/**
* When an object implementing interface <code>Runnable</code> is used
* to create a thread, starting the thread causes the object's
* <code>run</code> method to be called in that separately executing
* thread.
* <p>
* The general contract of the method <code>run</code> is that it may
* take any action whatsoever.
*
* @see java.lang.Thread#run()
*/
public abstract void run();
}

我们进行线程开发中常用的 Runnable 就是一个典型的函数式接口,上面源码可以看到它就被 @FunctionalInterface 注解。

可能有人会疑惑,函数式接口标记有什么用,这个原因是函数式接口可以很容易转换为 Lambda 表达式。这是另外的主题了,有兴趣的同学请自己搜索相关知识点学习

--------------------- 本文摘取 frank909 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/briblue/article/details/73824058?utm_source=copy

最新文章

  1. android 自定义动画
  2. 简单C程序生成的汇编代码分析
  3. react-组件生命周期
  4. UIResponder(iOS 常见的事件)
  5. javascript中的浅复制和深复制
  6. 【BZOJ】1012: [JSOI2008]最大数maxnumber(树状数组+rmq)
  7. 分布式网站架构后续:zookeeper技术浅析
  8. Java多线程——&lt;六&gt;更方便的线程
  9. AIX 命令大全
  10. CD key 生成
  11. 利用python3.5 +TK 开发股票自动交易伴侣
  12. 第三弹:ZFNet
  13. Git~GitLab当它是一个CI工具时
  14. 【原】spring boot添加cros全局过滤器
  15. 添加并删除Marker
  16. 数据库部分(MySql)_3
  17. 【kindle笔记】之 《解忧杂货店》-2018-3-13
  18. linux-shell系列6-rundeck生成host文件
  19. PHP 事务写法
  20. python3 文件和流

热门文章

  1. EPEL添加与删除
  2. 安装Gitlab到Ubuntu(APT)
  3. Bazinga HDU - 5510【技巧暴力+字符串】
  4. CSS3之border-image的使用
  5. spring boot的一些常用注解
  6. 谈一谈php反序列化
  7. [Python]爬取首都之窗百姓信件网址id python 2020.2.13
  8. Centos 安装SVN
  9. Django生成脚本迁移文件时,报错django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
  10. python数据分析学习(1)pandas一维工具Series讲解