how2j.cn


步骤 1 : @Override   
步骤 2 : @Deprecated   
步骤 3 : @SuppressWarnings   
步骤 4 : @SafeVarargs   
步骤 5 : @FunctionalInterface   
步骤 6 : 总结   

步骤 1 :

@Override

@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;
	}
}
步骤 2 :

@Deprecated

@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();
	}

}
步骤 3 :

@SuppressWarnings

@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();
	}

}
步骤 4 :

@SafeVarargs

@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;
	}
}
步骤 5 :

@FunctionalInterface

@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();
}
步骤 6 :

总结

以上5个都是内置注解,从开发过程中的体验来讲,有也可以,没有也可以,没什么大的卵用~ 大家晓得有这么回事就行了,重点还是后面要讲解的自定义注解


HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2017-09-19 请问一下什么是默认方法啊?
水不逝兮




1 个答案

how2j 答案时间:2017-09-20
请参考默认方法教程: http://how2j.cn/k/interface-inheritance/interface-inheritance-default-method/676.html




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2017-08-18 站长这里卖萌了!
hfutqy
我感觉到了!




1 个答案

how2j 答案时间:2017-08-21
(ˉ▽ˉ;)




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2017-07-19 打错字了
2017-06-07 错字的问题
2017-01-26




提问之前请登陆
关于 JAVA 高级-注解-基本内置注解 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 389538688
站长会在每个工作日早上尽量回答提问(如果有漏掉没有回答的,请进群提醒一下)
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
站长是玻璃心,提问的时候请语气温柔些 kiss~
截止2017-5-19日累计提问 1638个,站长回答了 1546个
截止2017-8-15日累计提问 2788个,站长回答了 2544个

上传截图