温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java中怎么利用反射获取类中字段和方法

发布时间:2021-06-18 15:44:14 来源:亿速云 阅读:132 作者:Leah 栏目:大数据

Java中怎么利用反射获取类中字段和方法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

一、自定义注解

1、字段注解

 import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
@Documented
@Target({ElementType.FIELD}) //注解应用类型
@Retention(RetentionPolicy.RUNTIME) // 注解的类型
public @interface FieldInterface {
   String name() default "";
}

2、方法注解

 import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
@Documented // 标记在生成javadoc时是否将注解包含进去,可有可无
@Target({ElementType.METHOD}) //注解应用类型
@Retention(RetentionPolicy.RUNTIME) // 注解的类型
public @interface MethodInterface {
   String name() default "";
}

二、创建实体类

public class TestClass {
 
@FieldInterface(name = "字段注解")
private String name = "ls";
private Constructor<?>[] declaredConstructors;
 
   @MethodInterface(name = "方法注解")
   public void isNot() {
 
   }
}

三、获取注解值

    //方法注解测试
	public void getMethodAnnotationValue() {
		// 获取所有的方法
		Method[] name = TestClass.class.getDeclaredMethods();
		for (Method str : name) {
			// 判断是否方法上存在注解
			boolean annotationPresent = str.isAnnotationPresent(MethodInterface.class);
			if (annotationPresent) {
				// 获取自定义注解对象
				MethodInterface methodAnno = str.getAnnotation(MethodInterface.class);
				// 根据对象获取注解值
				String isNotNullStr = methodAnno.name();		
				System.out.println(isNotNullStr);
			}
		}
	}
 
    //属性注解测试
	public void getFieldAnnotationValue() throws NoSuchFieldException, SecurityException {
		// 获取所有的字段
		Field[] fields = TestClass.class.getDeclaredFields();
		for (Field f : fields) {
			// 判断字段注解是否存在
			boolean annotationPresent2 = f.isAnnotationPresent(FieldInterface.class);
			if (annotationPresent2) {
				FieldInterface name = f.getAnnotation(FieldInterface.class);
				// 获取注解值
				String nameStr = name.name();
				System.out.println(nameStr);
			}
		}
	}

四、测试

public static void main(String[] args) throws NoSuchFieldException, SecurityException {
     TestClass c = new TestClass();

     // 获取方法上的注解值
     c.getMethodAnnotationValue();
 
     // 获取字段上的注解值
     c.getFieldAnnotationValue();
 
}

输出:

方法注解
字段注解

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI