java.lang.IllegalAccessException: Class A can not access a member of class B with modifiers "private"
错误如上
在如下代码
Field[] flds = M.getClass().getDeclaredFields();
if(flds != null){
for(int m = 0; m < flds.length; m++){
Field fieldCase = flds[m];
fieldCase.getName();
if(fieldCase.getType().getName().equals("java.lang.String") && fieldCase.get(args[i]) != null && fieldCase.getModifiers() == Member.PUBLIC){
fieldCase.setAccessible(true);
fieldCase.set(args[i],
(fieldCase.get(args[i]).toString()).Trim());
}
}
}(fieldCase.get(args[i]).toString()).Trim()这里是我要进行的操作,暂时用trim替代问题可能是我取得的M 对象在定义的时候是定义成private的,反射接触不多,麻烦大家详细解释一下如何处理才能允许我在这里可以编辑,M的Fields 。谢谢
错误如上
在如下代码
Field[] flds = M.getClass().getDeclaredFields();
if(flds != null){
for(int m = 0; m < flds.length; m++){
Field fieldCase = flds[m];
fieldCase.getName();
if(fieldCase.getType().getName().equals("java.lang.String") && fieldCase.get(args[i]) != null && fieldCase.getModifiers() == Member.PUBLIC){
fieldCase.setAccessible(true);
fieldCase.set(args[i],
(fieldCase.get(args[i]).toString()).Trim());
}
}
}(fieldCase.get(args[i]).toString()).Trim()这里是我要进行的操作,暂时用trim替代问题可能是我取得的M 对象在定义的时候是定义成private的,反射接触不多,麻烦大家详细解释一下如何处理才能允许我在这里可以编辑,M的Fields 。谢谢
&& fieldCase.getModifiers() == Member.PUBLIC
应该过滤掉private的成员了
if(fieldCase.getType().getName().equals("java.lang.String")
&& fieldCase.get(args[i]) != null
&& fieldCase.getModifiers() == Member.PUBLIC){
建议用代理模式来做。
我这段代码就是嵌套在 代理里面的 ,是phprpc 服务器端 调用的时候,
我想在调用方法之前 把参数 处理一下
改成这样判断是否public看看
1、Field[] flds = M.getClass().getDeclaredFields();这句不报错吗?且与下面的定义能看出有什么不同?
Field[] flds1 = M.class.getClass().getDeclaredFields();
Field[] flds2 = this.getClass().getDeclaredFields();
注意flds、flds1、flds2三个数组中的值是不同的,不信可以测一下(这涉及运行方法的修饰符类型)。2、getModifiers()的值:
1).Member.PUBLIC和Member.DECLARED有什么不同?
2).
public int max=100;
public static int min=0;
max的getModifiers()和min和getModifiers()值相等吗?把这些问题弄清了,问题就迎刃而解。
1.运行方法的修饰符问题能不能给详细讲讲,另外 M.class 这个直接编译就不通过的啊
2.Modifier我查了资料,一个field应该可以有多个修饰符,
这里改成 Modifier.isPublic(fieldCase.getModifiers())应该就可以了吧
1.我还是没找到有那样的方法
2.这个 我用Modifier.isPublic(fieldCase.getModifiers())来替代了原来错误的代码了
代理应该是java的动态代理 proxy的,用spring 的带interface测试一下?测试什么呢
这里没有用到内部类