public class TestClassA extends TestFather {
...
}
public class TestFather {
private TestOtherClass toc = new TestOtherClass();
prvate int getMapSize(TestClassB testClassB) {
if (testClassB != null) {
return toc;
} else {
return null;
}
}
}
public class TestOtherClass {
Map countMap = new HashMap();
}
public class TestClassB extends TestFather {
...
}
-----------------------通过反射获得一个实例的私有属性----------------
public int getMapSize(TestClassA testClassA) {
TestFather testFather = null;
TestOtherClass testOtherClass = null;
Map countMap = null;
Class clazz = testClassA.getClass();
Field field[] = clazz.getSuperclass().getDeclaredFields();
for (Field f : field) {
if ("toc".equals(f.getName())) {
f.setAccessible(true);
testOtherClass = (TestOtherClass) f.get(testClassA);
}
}
if (testOtherClass != null) {
clazz = testOtherClass.getClass();
field = clazz.getDeclaredFields();
for (Field f : field) {
if ("countMap".equals(f.getName())) {
f.setAccessible(true);
countMap = (Map) f.get(testOtherClass);
}
}
}
return countMap.size();
}
-----------------------通过反射调用一个实例的私有方法----------------
public int getMapSize(TestClassA testClassA) {
Class clazz = testClassA.getClass().getSuperclass();//如果是要获得TestClassA中的方法,不用调用getSuperclass Method getMapSize = clazz.getDeclaredMethod("getMapSize", TestClassB.class); getMapSize.setAccessible(true); Integer mapSize = (Integer) getMapSize.invoke(testClassA, new TestClassB()); return mapSize; }