java反射之遍历类中所有内部类及属性方法

package com.zr.entity;
/**
* 仅用于测试类,从实际项目中抽出来的
* @author zr
*
*/
public class Constant {
/**
* 参数校验枚举类
* @author zr
*
*/
public static enum ResultObjectType {
//成功
SUCC(0),
//失败,异常
ERROR(1),
//参数错误
PARAMERROR(2),
//数据为空
NODATA(9);
private Integer value;

private ResultObjectType(Integer value) {
this.value = value;
}

public Integer getDesc() {
return this.value;
}

}
/**
* 参数校验枚举类
* @author zr
* @date 2018年9月17日
*/
public static enum ParamValidate {
CheckLength("checkLength",0),
IsAccId("IsAccId",1),
IsAge("IsAge",2),
IsEmail("IsEmail",3),
IsIdCard("IsIdCard",4),
IsPhoneNo("IsPhoneNo",5),
IsPostCode("IsPostCode",6),
IsPwd("IsPwd",7);
// 成员变量
private String desc;
private int index;

// 构造方法
private ParamValidate(String name, int index) {
this.desc = name;
this.index = index;
}

// 覆盖方法
@Override
public String toString() {
return this.index + "_" + this.desc;
}

public String getDesc() {
return desc;
}

public void setDesc(String desc) {
this.desc = desc;
}

public int getIndex() {
return index;
}

public void setIndex(int index) {
this.index = index;
}
}

}

枚举

package com.zr.test;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Test {

    public static void main(String[] args) {
        test();
    }
    public static void test(){
        String substring = "ParamValidate";
        //根据反射获取常量类
        try {
            Class c2 = Class.forName("com.zr.entity.Constant");
            //获取常量类中的所有内部类
            Class innerClazz[] = c2.getDeclaredClasses();
            //遍历内部内
            for (Class class1 : innerClazz) {
                //判断类是不是枚举类
                if(class1.isEnum()){
                    //获取内部内的类名,在这里其实就是获取枚举类
                     String simpleName = class1.getSimpleName();
                    //反射获取枚举类
                     Class<Enum> clazz = (Class<Enum>)Class.forName("com.zr.entity.Constant$"+simpleName);
                     //获取所有枚举实例
                     Enum[] enumConstants = clazz.getEnumConstants();
                     //根据方法名获取方法
                     Method getCode = clazz.getMethod("getDesc");
                     for (Enum enum1 : enumConstants) {
                         //得到枚举实例名
                         String name2 = enum1.name();
                         //执行枚举方法获得枚举实例对应的值
                         Object invoke = getCode.invoke(enum1);
                         System.out.println(name2+":"+invoke.toString());
                     }
                 }

            }

        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

原文地址:https://blog.51cto.com/haidragon/2396899

时间: 2024-10-08 12:51:24

java反射之遍历类中所有内部类及属性方法的相关文章

使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法

Java提供了Class类,可以通过编程方式获取类别的字段和方法,包括构造方法 获取Class类实例的方法: 类名.class 实例名.getClass() Class.forName(className) public class RefTest { @Test public void testRef(){ //Class cls = RefTest.class; //Class.forName("com.jboa.service.RefTest"); //new RefTest()

Java通过反射机制修改类中的私有属性的值

首先创建一个类包含一个私有属性: class PrivateField{ private String username = "Jason"; } 通过反射机制修改username的值: //创建一个类的对象 PrivateField privateField = new PrivateField(); //获取对象的Class Class<?> classType = privateField.getClass(); //获取指定名字的私有域 Field field =

【java】java反射初探 ——“当类也照起镜子”

反射的作用 开门见山地说说反射的作用 1.为我们提供了全面的分析类信息的能力 2.动态加载类 我理解的“反射”的意义 (仅个人理解哈) 我理解的java反射机制就是: 提供一套完善而强大的API“反射“类的结构. 打个比方,反射机制就像是一面镜子,而类就像是一个在照着镜子的人. 镜子(反射机制)照出(反射)了人的全貌(类的全方位的信息,例如方法,成员变量和构造器等的相关信息) 为什么要照镜子? 因为不照镜子看不清楚自己的全貌,“镜子”就是为了解决这个问题出现的(为我们提供全面分析类的能力) 好吧

Java反射初探 ——“当类也学会照镜子”

反射的作用 开门见山地说说反射的作用 1.为我们提供了全面的分析类信息的能力 2.动态加载类 我理解的“反射”的意义 (仅个人理解哈) 我理解的java反射机制就是: 提供一套完善而强大的API“反射“类的结构. 打个比方,反射机制就像是一面镜子,而类就像是一个在照着镜子的人. 镜子(反射机制)照出(反射)了人的全貌(类的全方位的信息,例如方法,成员变量和构造器等的相关信息) 为什么要照镜子? 因为不照镜子看不清楚自己的全貌,“镜子”就是为了解决这个问题出现的(为我们提供全面分析类的能力) 好吧

Java 反射在实际开发中的应用

运行时类型识别(RTTI, Run-Time Type Information)是Java中非常有用的机制,在java中,有两种RTTI的方式,一种是传统的,即假设在编译时已经知道了所有的类型:还有一种,是利用反射机制,在运行时再尝试确定类型信息. 本篇博文会结合Thinking in Java 的demo 和实际开发中碰到的例子,对Java反射和获取类型信息做总体上整理.文章主要分为三块: Java类加载和初始化 Java中RTTI Java利用反射获取运行时类型信息 一:Java类加载和初始

[转]Java 反射在实际开发中的应用

一:Java类加载和初始化 1.1 类加载器(类加载的工具) 1.2 Java使用一个类所需的准备工作 二:Java中RTTI 2.1 :为什么要用到运行时类型信息(就是RTTI) 2.2  :RTTI在运行时如何表示 2.3   :  Class对象 2.3 : RTTI形式总结: 三:Java利用反射获取运行时类型信息 3.1 : 获取的方式 3.2 :   动态代理 四: Java反射在实际开发中应用 4.1  :在web项目中创建统一的拦截层 4.2 : 用于webService服务 :

C#反射调用程序集类中方法

建立类 class OperatorClass { /// <summary> /// 加法 /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <returns></returns> /// public static int Add(int x, int y) { r

JAVA反射之CLass类的练习

1 package zhang; 2 /** 3 * JAVA反射之CLass类的练习 4 * 5 * 在面向对象的语言里,万事万物皆对象,那么类是谁的对象呢? 6 * 类的类型是CLass 7 * 8 * */ 9 class Test{ 10 void print(){ 11 System.out.println("Hello world!"); 12 } 13 }//Test是一个类. 14 public class ClassDemo { 15 public static vo

C#判断一个类中有无&quot;指定名称&quot;的方法

C#中可以通过反射分析元数据来解决这个问题,示例代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 using System; using System.Reflection; namespace Hello {     class Program     {