java中内部类静态成员变量的值怎么利用反射机制获取 您所在的位置:网站首页 类的static成员 java中内部类静态成员变量的值怎么利用反射机制获取

java中内部类静态成员变量的值怎么利用反射机制获取

#java中内部类静态成员变量的值怎么利用反射机制获取| 来源: 网络整理| 查看: 265

 当前位置:首页 » 编程设计 » 正文 java中内部类静态成员变量的值怎么利用反射机制获取 2023年01月29日6qq号

待解析类结构如下:

/** * @Author changle * @Time 17/6/13. * @Desc to do */ public class Goods { static class apple{ public static String version = "iphone6s[是手机不是吃的苹果]"; public static String date = "生产日期 2017-06-13"; } }

获取内部类静态成员变量工具类:

/** * @Author changle * @Time 17/6/13. * @Desc 获取静态内部类静态变量 */ public class TestParseInnerProValue { public static void main(String[] args) { Class clasz = Goods.class; printInnerParamValue(clasz); } public static void printInnerParamValue(Class clasz){ Class innerClazz[] = clasz.getDeclaredClasses(); for(Class claszInner : innerClazz){ Field[] fields = claszInner.getDeclaredFields(); for(Field field : fields){ try { Object object = field.get(claszInner); System.out.println("获取到的feild, name=" + field.getName()+", value="+ object.toString()); //打印内容 /* * 获取到的feild, name=version, value=iphone6s[是手机不是吃的苹果] 获取到的feild, name=date, value=生产日期 2017-06-13 * */ } catch (IllegalAccessException e) { e.printStackTrace(); } } } } }

补充知识:Java 利用反射机制获取内部类的私有属性和方法,并且修改私有属性的值

废话不多说直接贴代码,代码中有注释,如下:

import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class Test { @SuppressWarnings("unused") class Test1{ //私有属性 private String color = "blue"; //无参数的私有方法使用私有属性 private void queryColor(){ System.out.println(color); } //一个参数的私有方法 private void privateTest1(String param1) { System.out.println(">>>>>>" + param1 + ">>>>>>>>>" + color +">>>>>>>>>>"); } //两个参数的私有方法 private void privateTest2(String param1,String param2) { System.out.println(">>>>>>" + param1 + ">>>>>>>>>"+ param2 + ">>>>>>>>"); } } /** * @Title: main * @Description: 利用反射机制获取内部类的私有属性和方法,并且修改私有属性的值 * @param args * @author songye * @date Jul 19, 2018 10:17:32 AM * @return: void */ public static void main(String[] args) { try { Test test = new Test(); Test1 test1 = test.new Test1(); //获取内部类的私有属性 Field colorField = Test1.class.getDeclaredField("color"); //设置为true表示可以访问private修饰的私有属性 colorField.setAccessible(true); System.out.println(colorField); //color的值改为red colorField.set(test1, "red"); //获取内部类的私有方法,无参数的 Method method = Test1.class.getDeclaredMethod("queryColor"); //设置为true表示可以访问private修饰的私有方法 method.setAccessible(true); System.out.println(method); //用来执行指定对象的方法,无参数的 method.invoke(test1); //获取内部类的私有方法,一个参数的 Method method1 = Test1.class.getDeclaredMethod("privateTest1",String.class); //设置为true表示可以访问private修饰的私有方法 method1.setAccessible(true); System.out.println(method1); //用来执行指定对象的方法,前面test1是对象,后面的是一个参数 method1.invoke(test1,"我调用了你的私有方法!!!"); //获取内部类的私有方法,两个参数的 Method method2 = Test1.class.getDeclaredMethod("privateTest2",String.class,String.class); //设置为true表示可以访问private修饰的私有方法 method2.setAccessible(true); System.out.println(method2); //用来执行指定对象的方法,前面test1是对象,后面的是两个参数 method2.invoke(test1, "用我的参数1","用我的参数2"); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } 本文参考链接:https://www.yisu.com/zixun/322792.html

上一篇: Java中向上转型与向下转型的区别有什么

下一篇: 怎么在java项目中实现一个二叉查找树算法

java   文章来源:ITGUEST,欢迎分享,转载请保留出处  原文地址:https://www.itguest.com/post/badcd2b2.html 阅读延展 Spring Boot 排除自动配置的 4 种方法,关键时刻很有用在java中使用Sorted时需要注意哪些问题java中断言与异常有什么区别Java中怎么实现局部变量类型的推断基于数据库自定义UserDetailsService实现Spring security认证java 中同步、异步、阻塞和非阻塞区别详解java中有哪些复制文件的方式在java项目中运用动态代理机制的方法张孝祥java精英培训班的入学测试题如何创建javabeanJVM中Xms和Xmx参数要设置为相同值的原因是什么Eclipse中给jar包导入JavaDoc的方法


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有