有些时候,有些jar 包里面的一个方法,我们想要改。但是已经是打成了jar包,并且是别人的jar包。我们不想去反编译,然后重新打包的话,那么就重新写一个类去继承这个类,然后去改变里面的方法的实现。
但是,有一个问题,父类的很多字段都是私有的,private的,我们需要通过反射得到。
参考:http://blog.csdn.net/qq_32452623/article/details/54025185
getFields() 获取所有public字段,包括父类字段
getDeclaredFields() 获取所有字段,public和protected和private,但是不包括父类字段
我们想要获取父类的私有东西怎么办?
public static void setSuperField(Object paramClass, String paramString,
Object newClass) {
Field field = null;
try {
field = paramClass.getClass().getSuperclass().getDeclaredField(paramString);
field.setAccessible(true);
field.set(paramClass, newClass);
} catch (Exception e) {
e.printStackTrace();
}
return;
}
public static Object getSuperField(Object paramClass, String paramString) {
Field field = null;
Object object = null;
try {
field = paramClass.getClass().getSuperclass().getDeclaredField(paramString);
field.setAccessible(true);
object = field.get(paramClass);
} catch (Exception e) {
e.printStackTrace();
}
return object;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
getClass().getSuperclass().getDeclaredField(paramString);
多么奇妙啊。哈哈