步骤 2 : @Deprecated 步骤 3 : @SuppressWarnings 步骤 4 : @SafeVarargs 步骤 5 : @FunctionalInterface 步骤 6 : 总结
@Override 用在方法上,表示这个方法重写了父类的方法,如toString()。
如果父类没有这个方法,那么就无法编译通过,如例所示,在fromString()方法上加上@Override 注解,就会失败,因为Hero类的父类Object,并没有fromString方法 package annotation;
public class Hero {
String name;
@Override
public String toString(){
return name;
}
@Override
public String fromString(){
return name;
}
}
package annotation; public class Hero { String name; @Override public String toString(){ return name; } @Override public String fromString(){ return name; } }
@Deprecated 表示这个方法已经过期,不建议开发者使用。(暗示在将来某个不确定的版本,就有可能会取消掉)
如例所示,开地图这个方法hackMap,被注解为过期,在调用的时候,就会受到提示 package annotation;
public class Hero {
String name;
@Deprecated
public void hackMap(){
}
public static void main(String[] args) {
new Hero().hackMap();
}
}
package annotation; public class Hero { String name; @Deprecated public void hackMap(){ } public static void main(String[] args) { new Hero().hackMap(); } }
@SuppressWarnings Suppress英文的意思是抑制的意思,这个注解的用处是忽略警告信息。
比如大家使用集合的时候,有时候为了偷懒,会不写泛型,像这样: List heros = new ArrayList(); 那么就会导致编译器出现警告,而加上 @SuppressWarnings({ "rawtypes", "unused" }) 就对这些警告进行了抑制,即忽略掉这些警告信息。 @SuppressWarnings 有常见的值,分别对应如下意思 1.deprecation:使用了不赞成使用的类或方法时的警告(使用@Deprecated使得编译器产生的警告); 2.unchecked:执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型; 关闭编译器警告 3.fallthrough:当 Switch 程序块直接通往下一种情况而没有 Break 时的警告; 4.path:在类路径、源文件路径等中有不存在的路径时的警告; 5.serial:当在可序列化的类上缺少 serialVersionUID 定义时的警告; 6.finally:任何 finally 子句不能正常完成时的警告; 7.rawtypes 泛型类型未指明 8.unused 引用定义了,但是没有被使用 9.all:关于以上所有情况的警告。 package annotation;
import java.util.ArrayList;
import java.util.List;
public class Hero {
String name;
@SuppressWarnings({ "rawtypes", "unused" })
public static void main(String[] args) {
List heros = new ArrayList();
}
}
package annotation; import java.util.ArrayList; import java.util.List; public class Hero { String name; @SuppressWarnings({ "rawtypes", "unused" }) public static void main(String[] args) { List heros = new ArrayList(); } }
@SafeVarargs 这是1.7 之后新加入的基本注解. 如例所示,当使用可变数量的参数的时候,而参数的类型又是泛型T的话,就会出现警告。 这个时候,就使用@SafeVarargs来去掉这个警告
@SafeVarargs注解只能用在参数长度可变的方法或构造方法上,且方法必须声明为static或final,否则会出现编译错误。一个方法使用@SafeVarargs注解的前提是,开发人员必须确保这个方法的实现中对泛型类型参数的处理不会引发类型安全问题。 以上解释很复杂,我也没搞明白,请忽略,往下学习。。。 package annotation;
public class Hero {
String name;
@SafeVarargs
public static <T> T getFirstOne(T... elements) {
return elements.length > 0 ? elements[0] : null;
}
}
package annotation; public class Hero { String name; @SafeVarargs public static <T> T getFirstOne(T... elements) { return elements.length > 0 ? elements[0] : null; } }
@FunctionalInterface这是Java1.8 新增的注解,用于约定函数式接口。
函数式接口概念: 如果接口中只有一个抽象方法(可以包含多个默认方法或多个static方法),该接口称为函数式接口。函数式接口其存在的意义,主要是配合Lambda 表达式 来使用。 如例所示,AD接口只有一个adAttack方法,那么就可以被注解为@FunctionalInterface,而AP接口有两个方法apAttack()和apAttack2(),那么就不能被注解为函数式接口 package annotation;
@FunctionalInterface
public interface AD {
public void adAttack();
}
package annotation; @FunctionalInterface public interface AD { public void adAttack(); }
package annotation;
@FunctionalInterface
public interface AP {
public void apAttack();
public void apAttack2();
}
package annotation; @FunctionalInterface public interface AP { public void apAttack(); public void apAttack2(); }
以上5个都是内置注解,从开发过程中的体验来讲,有也可以,没有也可以,没什么大的卵用~ 大家晓得有这么回事就行了,重点还是后面要讲解的自定义注解。
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
问答区域
2019-07-11
....
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2019-01-24
用词问题
5 个答案
wangrenpiao 跳转到问题位置 答案时间:2022-06-23 话太多
7905123 跳转到问题位置 答案时间:2019-06-27 我觉得还挺好,喜欢打游戏的人,大多就是站长的这个风格了。
rockmanzzx 跳转到问题位置 答案时间:2019-06-24 白嫖还那么多事?
genglong 跳转到问题位置 答案时间:2019-03-26 有些人喜欢站长的风格,有些人不喜欢,但是站长对知识点都解释到了,所以你不能强求站长改变教学风格吧.
就像学生时代可能会因为喜欢某个老师或讨厌某个老师而偏科(但是学习其实是不应该因为老师而偏科的,虽然很难做到)
娶一个昵称 跳转到问题位置 答案时间:2019-03-01 因为站长大人穿品如的衣服啊。-_-
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2018-11-23
感谢傻瓜式解读
2017-09-19
请问一下什么是默认方法啊?
2017-08-18
站长这里卖萌了!
提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 3 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|