注解的创建和使用

[color=red][b]什么是注解这些东西请看 think in java
在这个实例中演示的是注解的创建和利用反射原理去获取代码信息[/b][/color]
[size=large][b]
1、解释本实例用到的注解及解释
2、创建注解
3、创建使用注解的类
4、利用反射机制去解析类代码信息[/b][/size]
============================================================================================

1、注解的方法不能有参数
注解的返回类型是 “基本类型” “字符串” “枚举” “Class” “返回类型的数组”
注解可以添加元注解:
Documented:将此注解包在javadoc中
Target:表示该注解用在什么地方,method:声明方法
Inherited:表示继承父类中的注解
Retention:表示在什么级别保存该注解信息,RetentionPolicy.RUNTIME:运行期 间保留

2、

package com.gyj.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* 创建注解
* @author GYJ
* @date 2014-3-23
*/

@Documented
@Target(ElementType.METHOD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface MethodInfo {
String author() default "gyj";
String date();
int revision() default 1;
String comments();
}


3、

package com.gyj.annotation;

import java.util.ArrayList;
import java.util.List;

public class AnnotationExample {

/**
* @param args
*/
public static void main(String[] args) {

}

@Override
@MethodInfo(author = "gyj", comments = "main method", date = "2014", revision = 1)
public String toString() {
return "overriden to string method";
}

@Deprecated
@MethodInfo(comments = "method1", date = "2019")
public static void oldMethod() {
System.out.println("old method don't use it");
}

@SuppressWarnings({"unchecked", "deprecation"})
@MethodInfo(author = "gyj", comments = "main genericsTest", date = "2015", revision = 2)
public static void genericsTest() {
List l = new ArrayList<>();
l.add("abc");
//发出警告
oldMethod();
}

}



4、
package com.gyj.annotation;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

public class AnnotationParsing {

/**
* 解析注解
* @param args
*/
public static void main(String[] args) {
try {
Method[] method = Class.forName("com.gyj.annotation.AnnotationExample").getMethods();
for (Method method1 : method) {
//验证MethodInfo注解是否可以继承
if (method1.isAnnotationPresent(com.gyj.annotation.MethodInfo.class)) {
for (Annotation annotation : method1.getAnnotations()) {
//具体的注解信息和方法
System.out.println("注解" + annotation + "存在方法" + method1 + "\n");
}
//根据注解信息条件性的做出操作
MethodInfo methodInfo = method1.getAnnotation(MethodInfo.class);
if (methodInfo.revision() == 1) {
System.out.println("revision 是 1 的方法是 " + methodInfo);
}
}
}
} catch (SecurityException | ClassNotFoundException e) {
e.printStackTrace();
}
}

//out put===========================
/*注解@com.gyj.annotation.MethodInfo(author=gyj, revision=1, comments=main method, date=2014)存在方法public java.lang.String com.gyj.annotation.AnnotationExample.toString()

revision 是 1 的方法是 @com.gyj.annotation.MethodInfo(author=gyj, revision=1, comments=main method, date=2014)
注解@java.lang.Deprecated()存在方法public static void com.gyj.annotation.AnnotationExample.oldMethod()

注解@com.gyj.annotation.MethodInfo(author=gyj, revision=1, comments=method1, date=2019)存在方法public static void com.gyj.annotation.AnnotationExample.oldMethod()

revision 是 1 的方法是 @com.gyj.annotation.MethodInfo(author=gyj, revision=1, comments=method1, date=2019)
注解@com.gyj.annotation.MethodInfo(author=gyj, revision=2, comments=main genericsTest, date=2015)存在方法public static void com.gyj.annotation.AnnotationExample.genericsTest()*/


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值