java内建注解及源码浅析

java内建注解及源码浅析

首先,先看java.lang下的4个annoation类型。如图所示:
这里写图片描述

1.Override

1.1 源码

表明在类中需要覆盖重写超类中声明的方法。如果这个方法注解了该annotation类型,但是没有重写超类的方法,编译将器会报错。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}

由上面源码可知。注解类型为METHOD,即只能在方法上注解。保留策略为SOURCE,即只保留在源文件中,在编译期间就会被丢弃。

1.2 实例
public class InnerAnnotationTest {


    public static void main(String[] args) {
        InnerAnnotationTest innerAnnotationTest = new InnerAnnotationTest();
        System.out.println(innerAnnotationTest.toString());
    }

    @Override
    public String toString() {
        //重写了toString方法
        return "new String";
    }
}

2.SuppressWarnings

2.1 源码

表明取消编译器对被注解元素的警告(包含在该注解元素的所有程序元素)。如果你注解了一个类来取消某个方法的警告,同时你注解了该方法来取消另一个警告,两个警告都会被取消。
根据风格不同,程序员应该始终在最里层的嵌套元素上使用此注释,在那里使用才有效。如果要在特定的方法中取消显示某个警告,则应该注释该方法而不是注释它的类。

@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
    String[] value();
}

由上面源码可知。注解类型是除PACKAGEANNOTATION_TYPE以外的元素。保留策略为SOURCE,即只保留在源文件中,在编译期间就会被丢弃。

2.2 实例
import java.io.Serializable;

@SuppressWarnings("serial")
public class InnerAnnotationTest implements Serializable{

}

上面的例子只展示一个示例。即实现了Serializable接口但并没有serialVersionUID字段。
相应的还有很多。
这里写图片描述

3.Deprecated

3.1 源码

程序元素被Deprecated注解意味着程序员并不鼓励使用该元素,例如可能会存在危险,或者是已经存在更好的选择。编译器会发出警告,当不赞成的程序元素被使用或者在不赞成的代码重写的时候。

@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Deprecated {
}

由上面源码可知。保留策略为RUNTIME,在编译期间会被保留在class文件中,以及VM运行中。

3.2 实例
public class InnerAnnotationTest {

    public static void main(String[] args) {
        InnerAnnotationTest innerAnnotationTest = new InnerAnnotationTest();
        innerAnnotationTest.deprecatedTest();
    }

    @Deprecated
    public void deprecatedTest(){
        System.out.println("不赞成的方法");
    }

}

4.SafeVarargs

以上三种注解为jdk1.5的时候就存在的,而这第四个SafeVarargs为jdk1.7是出现。

4.1 源码

程序员声明被注解的方法或构造函数的变长参数不会执行不安全操作。取消出现的非具体参数警告和未检查的参数化array警告

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})
public @interface SafeVarargs {}

由上面源码可知。注解类型是CONSTRUCTORMETHOD即构造函数和方法。保留策略为RUNTIME,在编译期间会被保留在class文件中,以及VM运行中。

4.2 实例
  //此方法为API中的示例方法
 @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!
 }

5.参考:

http://tool.oschina.net/apidocs
https://docs.oracle.com/javase/7/docs/api/
http://www.importnew.com/17413.html
http://www.cnblogs.com/fsjohnhuang/p/4040785.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值