标签:value ack 成功 vat 它的 依赖性 代码实现 入门 trace
@Override
public void doSomething() {
System.out.println("复写了父类doSomething()!)");
}
public @interface 注解名称 {
//String weather() default "";//注解中可以没有属性,并且在注解中属性是以方法的形式存在
}
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface WeatherAnnotation {
String weather() default "";
}
以上注解通过ElementType.FIELD限制了该注解只能标识属性,通过RetentionPolicy.RUNTIME指定了注解的生命周期——代码运行时生效,自定义注解基本上都是使用该枚举字段声明其生命周期。接下来,开始编写测试注解的代码:
package com.wyfx.nio.annotation;
public class Today {
@WeatherAnnotation(weather="hello,今天是晴天")
private String dayWeather;
public String getDayWeather() {
return dayWeather;
}
public void setDayWeather(String dayWeather) {
this.dayWeather = dayWeather;
}
@Override
public String toString() {
return "Today{" +
"dayWeather=‘" + dayWeather + ‘\‘‘ +
‘}‘;
}
}
import java.lang.reflect.Field;
public class Test {
public static void main(String[] args){
/*Annotation annotations=new Today().getClass().getAnnotation(WeatherAnnotation.class);*/
try {
Class aClass=Class.forName("com.wyfx.nio.annotation.Today");
Field[] fields= aClass.getDeclaredFields();
String weather="";
for (Field field : fields) {
if(field.isAnnotationPresent(WeatherAnnotation.class)){
WeatherAnnotation weatherAnnotation=field.getAnnotation(WeatherAnnotation.class);
weather= weatherAnnotation.weather();
}
}
System.out.println("--annotation---:"+weather);
}catch (Exception e){
e.printStackTrace();
}
}
}
以上代码顺利打印出“hello,今天是晴天”,说明自定义注解成功了,值得注意的是,注解的作用域是属性,所以在通过反射进行测试的时候,必须在Field的基础上去判断是否是Annotation接口的子类(field.isAnnotationPresent(),然后获取注解子类对象。
标签:value ack 成功 vat 它的 依赖性 代码实现 入门 trace
原文地址:https://www.cnblogs.com/onedayinMay/p/12203585.html