关于java 注解中元注解Inherited的使用详解
来源:互联网 发布:淘宝运营简历模板下载 编辑:程序博客网 时间:2024/04/30 19:49
关于java中元注解Inherited 的使用说明
首先解释下元注解,就是用来中声明注解类型时需要使用到的注解。
Inherited作用是,使用此注解声明出来的自定义注解,在使用此自定义注解时,如果注解在类上面时,子类会自动继承此注解,否则的话,子类不会继承此注解。这里一定要记住,使用Inherited声明出来的注解,只有在类上使用时才会有效,对方法,属性等其他无效。
下面看下代码就明了了。
/** * 声明的此注解使用了Inherited元注解,表示此注解用在类上时,会被子类所继承 * @author crazy */@Retention(RetentionPolicy.RUNTIME)@Inheritedpublic @interface InheritedTest {String value();}
/** * 声明的此注解没有使用Inherited元注解,表示此注解用在类上时,不会被子类所继承 * @author crazy */@Retention(RetentionPolicy.RUNTIME)public @interface InheritedTest2 {String value();}
/** * 父类 * @author crazy */@InheritedTest("使用Inherited的注解 class")@InheritedTest2("未使用Inherited的注解 class")public class Parent {@InheritedTest("使用Inherited的注解 method")@InheritedTest2("未使用Inherited的注解 method")public void method(){}@InheritedTest("使用Inherited的注解 method2")@InheritedTest2("未使用Inherited的注解 method2")public void method2(){}@InheritedTest("使用Inherited的注解 field")@InheritedTest2("未使用Inherited的注解 field")public String a;}
/** * 子类 只继承了一个method方法 * @author crazy */public class Child extends Parent {@Overridepublic void method() {}}
/** * 通过反射进行测试 * @author crazy */public class test {public static void main(String[] args) throws NoSuchMethodException, SecurityException, NoSuchFieldException {Class<Child> clazz = Child.class;//对类进行测试 System.out.println("对类进行测试");if(clazz.isAnnotationPresent(InheritedTest.class)){System.out.println(clazz.getAnnotation(InheritedTest.class).value());}if(clazz.isAnnotationPresent(InheritedTest2.class)){System.out.println(clazz.getAnnotation(InheritedTest2.class).value());}System.out.println();//对方法 进行测试System.out.println("对方法进行测试");Method method = clazz.getMethod("method", null);if(method.isAnnotationPresent(InheritedTest.class)){System.out.println(method.getAnnotation(InheritedTest.class).value());}if(method.isAnnotationPresent(InheritedTest2.class)){System.out.println(method.getAnnotation(InheritedTest2.class).value());}System.out.println();//对方法2 进行测试System.out.println("对方法2进行测试");Method method2 = clazz.getMethod("method2", null);if(method2.isAnnotationPresent(InheritedTest.class)){System.out.println(method2.getAnnotation(InheritedTest.class).value());}if(method2.isAnnotationPresent(InheritedTest2.class)){System.out.println(method2.getAnnotation(InheritedTest2.class).value());}System.out.println();//对属性测试System.out.println("对属性进行测试");Field field = clazz.getField("a");if(field.isAnnotationPresent(InheritedTest.class)){System.out.println(field.getAnnotation(InheritedTest.class).value());}if(field.isAnnotationPresent(InheritedTest2.class)){System.out.println(field.getAnnotation(InheritedTest2.class).value());}}}
下面是输出结果
对类进行测试使用Inherited的注解 class对方法进行测试对方法2进行测试使用Inherited的注解 method2未使用Inherited的注解 method2对属性进行测试使用Inherited的注解 field未使用Inherited的注解 field
由上可以看出,通过Inherited元注解声明的自定义注解,在类上使用时,可以被子类继承,对第一个方法进行测试时,由于子类继承了父类方法,且两个都没有输出,证明Inherited对方法无效,由方法2可以看出,因为子类没有重写父类方法,所以是直接使用的父类方法,所以两个都会输出,同理属性也是,都会输出。
所以证明最后结论:通过对注解上使用元注解Inherited声明出的注解,在使用时用在类上,可以被子类所继承,对属性或方法无效。
0 0
- 关于java 注解中元注解Inherited的使用详解
- 关于java 注解中元注解Inherited的使用详解
- 关于java 注解中元注解Inherited的使用详解
- java Inherited 注解的详解
- Java注解@Inherited的使用
- java注解的Inherited
- Java注解学习四:@Inherited的使用
- Java注解学习四:@Inherited的使用
- Java注解之@Inherited的使用
- java自定义注解中元注解的含义
- Java注解之Retention、Documented、Inherited的简单使用
- Java注解之@Inherited
- 关于元注解@Inherited的探究
- JAVA元注解@interface详解(@Target,@Documented,@Retention,@Inherited)。
- 关于元注解@Inherited()再探究
- java中关于《注解》的详解
- Java注解之Retention、Documented、Inherited介绍
- Java注解之Retention、Documented、Inherited介绍
- C++的四种强制类型转换
- NYOJ 题目176整数划分(二)(递归)
- go基础——03(array、slice、map)
- 为什么贪官总是层出不穷 打了又来了 但人为财死 鸟为食亡!
- Android开发之ListView实现不同品种分类分隔栏的效果(非ExpandableListView实现)
- 关于java 注解中元注解Inherited的使用详解
- hdu1715 大菲波数(高精度)
- 常见设计模式解析和实现(C++)Prototype模式(原型模式)
- Spring RMI配置多个服务
- 常见设计模式解析和实现(C++)Adapt模式
- 常见设计模式解析和实现(C++)FlyWeight模式
- AVD可以运行android应用无法运行
- spring mvc4使用及json 日期转换解决方案
- Unity学习小结4 - NGUI的几点性能问题