java 通过反射获得类的属性和调用方法
2015-08-21 10:41
537 查看
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;
}
...
}
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;
}
相关文章推荐
- 解决The hierarchy of the type is inconsistent错误
- 二叉树三种遍历 (Java)
- Eclipse安装Spket插件
- eclipse/myeclipse使用Memory Analyzer Tool (mat)方法
- 奇虎360Java笔试题
- Eclipse安装FindBugs
- JAVA代码优化性能
- java调用mysql的存储过程
- MyEclipse、Eclipse SVN插件的帐号、密码修改
- 学习Spring笔记_Annotation(注解)_Component
- java中abstract怎么使用
- jdk带的基本类库rt.jar 和 jre中的核心类库有什么区别
- spark windows单机安装,intellij、eclipse开发
- Spring嵌套事务控制
- JAVA中获取当前系统时间的两种方法
- Java-IO学习-基础读写(2)
- 一致性哈希算法与Java实现(转载)
- spring mvc 配置
- Java内存分析利器MAT使用详解
- JAVA泛型-类型擦除太恶心,但项目中大量使用,以及类型擦除引起的问题及解决方法