Java的基本Annotation(Java基础复习归纳系列)

        Annotation:从JDK1.5开始增加的写在代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过使用Annotation可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息,供分析工具、开发工具和部署工具进行验证或部署。

1.@Override

        用来指定方法重写,强制一个子类必须覆盖父类的方法,否则就会编译出错。

2.@Deprecated

        用于表示某个程序元素(类、方法等)已过时,当其他程序使用已过时的这些程序元素时,编译器将会给出警告。

注:@Deprecated与文档注释中的@deprecated作用基本相同,但用法不同,前者从JDK1.5开始支持,直接用于修饰方法、类、接口等;后者需要放在文档注释/**...*/中。

public class TestDeprecated {
     public static void main(String[] args) {
         test1();
         test2();
     }
     @Deprecated
     public static void test1(){
         System.out.println("此方法已过时");
     }
     
     /**@deprecated*/
     public static void test2(){
         System.out.println("此方法已过时");
     }
}

3.@SuppressWarnings

        指示被改Annotation修饰的程序元素(以及该程序元素中的所有子元素)取消显示指定的编译器警告。

        当使用@SuppressWarnings Annotation来关闭编译器警告时,一定要在括号里使用name=value的形式为该Annotation的成员变量设置值。

public class TestSupressWarnings {

	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static void main(String[] args) {
		Book book = new Book();
		book.setName("Java");
	}
}
class Book<T>{
	@SuppressWarnings("unused")
	private T name;
	public void setName(T name) {
		this.name = name;
	}
}

 4.@SafeVarargs

       堆污染(Heap Pollution):当把一个不带泛型的对象赋给一个带泛型的变量时,往往就会发生这种“堆污染”。

public class HeapPollution
{
//	@SafeVarargs
	public static void faultyMethod(List<String>... listStrArray)
	{
		// Java语言不允许创建泛型数组,因此listArray只能被当成List[]处理
		// 此时相当于把List<String>赋给了List,已经发生了“擦除”
		List[] listArray = listStrArray;
		List<Integer> myList = new ArrayList<Integer>();
		myList.add(new Random().nextInt(100));
		// 把listArray的第一个元素赋为myList
		listArray[0] = myList;
		String s = listStrArray[0].get(0);
	}
	public static void main(String[] args) {
		faultyMethod(Arrays.asList("Hello"),Arrays.asList("World!"));
	}
}

由于该方法有个形参是List<String>...类型,个数可变的形参相当于数组,但Java又不支持泛型数组,因此程序只能把List<String>...当成List[]处理,这里就发生了“堆污染”。从Java7开始,Java编译器会在定义该方法时就发出“堆污染”警告:

        如图,可使用如下方式来压制警告:

  • 使用@SafeVarargs修饰引发该警告的方法或构造器。

  • 使用SuppressWarnings("unchecked")修饰。(Java7开始)

参考资料:《Java疯狂讲义》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值