本文共 1182 字,大约阅读时间需要 3 分钟。
一般而言,一个类只允许访问另一个类中的public
然而当我们非要访问私有成员的时候,这时候Java的反射机制就用得上了。
package com.comac.reflect;public class A { private String testStr="just for test"; private void get(int index, String value){ System.out.println(index+":"+value+" and testStr:"+testStr); } }
类B要访问类A中的私有成员。
import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class B{ public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException, NoSuchMethodException, InvocationTargetException { Field field = Class.forName("com.comac.reflect.A").getDeclaredField("testStr"); field.setAccessible(true); A a = new A(); System.out.println(field.getType().toString()); System.out.println(field.getName()); System.out.println(field.getModifiers()); Object s = field.get(a); System.out.println(s); String x = "hello"; field.set(a, x); System.out.println(field.get(a)); Method method = Class.forName("com.comac.reflect.A").getDeclaredMethod("get", new Class[]{int.class, String.class}); method.setAccessible(true); method.invoke(a, 3, "apple"); }}
转载地址:http://dgqii.baihongyu.com/