`
zy19982004
  • 浏览: 654148 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:249799
社区版块
存档分类
最新评论

Java注解学习四:@Inherited的使用

 
阅读更多

.@Inherited

     @Inherited:允许子类继承父类的注解。

 

二.代码

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface DBTable {	
	public String name() default "";	
}


@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface DBTable2 {
	public String name() default "";	
}


package com.jyz.study.jdk.reflect;

import java.util.Arrays;

import com.jyz.study.jdk.annotation.DBTable;
import com.jyz.study.jdk.annotation.DBTable2;

/**
 * 1.演示从Class对象上获得反射元素Field Method Constructor
 * 2.演示AnnotatedElement接口的四个方法
 * @author JoyoungZhang@gmail.com
 *
 */
public class DeclaredOrNot {

	public static void main(String[] args) {
		Class<Sub> clazz = Sub.class;
		System.out.println("============================Field===========================");
		//public + 继承
		System.out.println(Arrays.toString(clazz.getFields()));
		//all + 自身
		System.out.println(Arrays.toString(clazz.getDeclaredFields()));
		
		System.out.println("============================Method===========================");
		//public + 继承
		System.out.println(Arrays.toString(clazz.getMethods()));
		//all + 自身
		System.out.println(Arrays.toString(clazz.getDeclaredMethods()));
		
		System.out.println("============================Constructor===========================");
		//public + 自身
		System.out.println(Arrays.toString(clazz.getConstructors()));
		//all + 自身
		System.out.println(Arrays.toString(clazz.getDeclaredConstructors()));
		
		
		System.out.println("============================AnnotatedElement===========================");
		//注解DBTable2是否存在于元素上
		System.out.println(clazz.isAnnotationPresent(DBTable2.class));
		//如果存在该元素的指定类型的注释DBTable2,则返回这些注释,否则返回 null。
		System.out.println(clazz.getAnnotation(DBTable2.class));
		//继承
		System.out.println(Arrays.toString(clazz.getAnnotations()));
		//自身
		System.out.println(Arrays.toString(clazz.getDeclaredAnnotations()));
	}
}

@DBTable
class Super{
	private int superPrivateF;
	public int superPublicF;
	
	public Super(){
	}
	
	private int superPrivateM(){
		return 0;
	}
	public int superPubliceM(){
		return 0;
	}
}

@DBTable2
class Sub extends Super{
	private int subPrivateF;
	public int subPublicF;
	
	private Sub(){
	}
	public Sub(int i){
	}
	
	private int subPrivateM(){
		return 0;
	}
	public int subPubliceM(){
		return 0;
	}
}



console output:
============================Field===========================
[public int com.jyz.study.jdk.reflect.Sub.subPublicF, public int com.jyz.study.jdk.reflect.Super.superPublicF]
[private int com.jyz.study.jdk.reflect.Sub.subPrivateF, public int com.jyz.study.jdk.reflect.Sub.subPublicF]
============================Method===========================
[public int com.jyz.study.jdk.reflect.Sub.subPubliceM(), public int com.jyz.study.jdk.reflect.Super.superPubliceM(), public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException, public final void java.lang.Object.wait() throws java.lang.InterruptedException, public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException, public boolean java.lang.Object.equals(java.lang.Object), public java.lang.String java.lang.Object.toString(), public native int java.lang.Object.hashCode(), public final native java.lang.Class java.lang.Object.getClass(), public final native void java.lang.Object.notify(), public final native void java.lang.Object.notifyAll()]
[private int com.jyz.study.jdk.reflect.Sub.subPrivateM(), public int com.jyz.study.jdk.reflect.Sub.subPubliceM()]
============================Constructor===========================
[public com.jyz.study.jdk.reflect.Sub(int)]
[private com.jyz.study.jdk.reflect.Sub(), public com.jyz.study.jdk.reflect.Sub(int)]
============================AnnotatedElement===========================
true
@com.jyz.study.jdk.annotation.DBTable2(name=)
[@com.jyz.study.jdk.annotation.DBTable(name=), @com.jyz.study.jdk.annotation.DBTable2(name=)]
[@com.jyz.study.jdk.annotation.DBTable2(name=)]

 

三.代码说明

  1. 代码演示了从Class对象上获得反射元素Field Method Constructor时get*和getDeclared*的区别。
  2. 代码演示了AnnotatedElement接口的四个方法。
    1. java.lang.reflect.AnnotatedElement表示可以被注解的元素。它只有四个方法,参考代码DeclaredOrNot.java。
    2. 当我使用clazz.getAnnotations()时,我期望得到控制台打印出来的内容,但实际上却只得到了[@com.jyz.study.jdk.annotation.DBTable2(name=)],后来发现是DBTable里没有声明@Inherited。

 

 

分享到:
评论

相关推荐

    java元注解@Inherited的使用详解

    主要介绍了java元注解@Inherited的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Java中三种标准注解和四种元注解.pdf

    Java5.0定义的元注解:  1.@Target,  2.@Retention,  3.@Documented,  4.@Inherited  这些类型和它们所⽀持的类在java.lang.annotation包中可以找到。下⾯我们看⼀下每个元注解的作⽤和相应分参数的使⽤说明。 ...

    鹦鹉:像鹦鹉一样学习Java;

    注解的目标,使用ElementType枚举,目标可以有多个,用{}表示@Retention :注解保留到什么时候,使用RetentionPolicy ,更改RetentionPolicy.CLASS @Documented :表示注解信息包含到生成的文档中@Inherited :...

    观看韩顺平学习整理java的笔记到异常

    帮助大家复习java基础知识其中有 hashCode 2 toString 2 finalize 2 用已学知识做出简单的房屋出租系统 3 类方法使用注意事项和细节讨论 4 ...@Inherited 注解 20 异常-Exception 21 编译异常 22 异常处理 2

    Java注解之Retention、Documented、Inherited介绍

    主要介绍了Java注解之Retention、Documented、Inherited注解介绍,本文内容和相关文章是系列文章,需要的朋友可以参考下

    Java版水果管理系统源码-huihe_2020summer:2020假期spring学习,vue留给你们了,有兴趣自己可以看官方文档,中文很

    2020假期spring学习 1.注解和反射 1.注解 Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 Java 语言中的类、方法、变量、参数和包等都可以被标注。 内置的注解 作用在代码的注解是 @...

    Java内功修炼系列:注解(Annotation)

    四 Java 预置的注解 4.1 @Deprecated 4.2 @Override 4.3 @SuppressWarnings 4.4 @SafeVarargs 4.5 @FunctionalInterface 五 注解的属性 5.1 属性的定义 5.2 注解的提取 六 注解的使用场景 七 注解实战之简易测试...

    android 注解入门(Acitivity路由demo)

    近期接触了路由和模块间通信的内容,发现Java注解非常常用。 避免后面看各源码被其阻塞,大致了解了下,作此文记录之。 注解类型 @Target @Retention @Documented @Inherited @Target 用于描述注解的使用范围,可能...

    java8源码-Annotation_demo:Annotation_demo

    Java注解 简介 由于无论在Java后台或者Android开发中我们经常遇到注解这个功能机制,例如常用的框架Java后台开发中,Spring、MyBatis等,Android的Dagger2,butterknife等,都是注解框架。今天我们就了解java是如何...

    Java语言高级部分之注解是什么?

    元注解(JDK的元Annotation)4.1.@Target4.2.@Retention4.3.@Documented4.4.@Inherited4.5.@Result四、在程序中使用(解析)注解五、案例——简单的测试框架 一、注解是什么?  从JDK5开始,Java增加对元数据的支持...

    带有Inherited注解的service

    带有Inherited注解的service文件,包含java源文件和编译后的class文件,可用于dubbo+zookeeper平台的事务处理,下载后直接将原来的server.class文件替换即可

    java基础案例与开发详解案例源码全

    5.4.4 Java中对象的创建和使用127 5.5 属性130 5.5.1 属性的定义130 5.5.2 变量131 5.6 方法132 5.6.1 方法的定义132 5.6.2 构造方法135 5.6.4 方法重载138 5.6.5 自定义方法138 5.6.6 系统提供方法139 5.6.7 方法...

    Android注解基础介绍快速入门与解读

    首先什么是注解,它的作用是什么,本文讲解了Android注解的最基本内容与实例解读

    JAVA核心知识点整理(有效)

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    jfinalpluginsjfinal-dreampie.zip

    @Inherited @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD}) public @interface CacheNameRemove {  String name();  String[] keys() default {}; } //根据key...

Global site tag (gtag.js) - Google Analytics