这篇文章将为大家详细讲解有关java中内部类静态成员变量的值怎么利用反射机制获取,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
待解析类结构如下:
/** * @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(); } } }
关于java中内部类静态成员变量的值怎么利用反射机制获取就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。