//自定义Annotation
@Retention(RetentionPolicy.RUNTIME) //此Annotation在运行时生效
@interface MyAnnotation {
// 定义属性
public String name();
public int age() default 10; //默认值
}
//测试类
@MyAnnotation(name = "test")
class Member implements Serializable {
// @Override
// @Deprecated
// public String toString() {
// return super.toString();
// }
}
public class TestDemo {
public static void main(String[] args) throws Exception {
// Annotation[] ant = Member.class.getMethod("toString").getAnnotations();
MyAnnotation ant = Member.class.getDeclaredAnnotation(MyAnnotation.class);
System.out.println("Name:" + ant.name());
System.out.println("Age:" + ant.age());
}
}
//Annotation的应用
//接口
interface IFruit {
public void eat();
}
//接口实现类
class Apple implements IFruit {
public void eat() {
System.out.println("吃苹果");
}
}
//工厂类
@MyAnnotation(target = Apple.class) //默认注释属性
class Factory {
public static <T> T getInstance() throws InstantiationException, IllegalAccessException {
MyAnnotation ant = Factory.class.getAnnotation(MyAnnotation.class); //获取指定的注释信息
return (T) ant.target().newInstance(); //返回实例化的注释信息
}
}
//自定义Annotation
@Retention(RetentionPolicy.RUNTIME) //此Annotation在运行时生效
@interface MyAnnotation {
// 定义属性
public Class<?> target();
}
public class TestDemo {
public static void main(String[] args) throws Exception {
IFruit fruit = Factory.getInstance();
fruit.eat();
}
}
自定义Annotation
最新推荐文章于 2022-02-26 12:05:06 发布