java反射,调用private的方法 80

前提是不同包下,可以调用,类A可以通过反射调用类B中的privateM()方法不?不可以的话,说下原因。可以的话贴下代码。不懂的别乱说,谢谢。看好了,不同包... 前提是不同包下,可以调用,类A可以通过反射调用类B中的private M()方法不?不可以的话,说下原因。可以的话贴下代码。不懂的别乱说,谢谢。看好了,不同包 展开
 我来答
淼淼想某人
2015-01-16 · 超过62用户采纳过TA的回答
知道小有建树答主
回答量:91
采纳率:100%
帮助的人:106万
展开全部
so easy
String path=“com.test.B”
Class clazz = Class.forName(path);   //获得b的反射
B b =(B)clazz.newInstance();   //前提是b类有个无参构造函数
Method m = clazz.getDeclaredMehod("SetName",String.class);
m.setAccessible(true);    //不做安全检查,你才可以去访问私有方法
m.invoke(b,"哈哈");

这里是给B里面的(下面这个方法进行调用赋值)
private void SetName(String s){}


ps  getDeclaredMehod 是对私有的方法进行调用 要访问必须加setAccessible
    getMehod 是对通用方法进行调用,不用加setAccessible
宋建泽
2015-01-16
知道答主
回答量:30
采纳率:0%
帮助的人:12.6万
展开全部
public class B {

public void m(int x){
System.out.println("m function");
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

}

}
package a;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

//import b.B;

public class A {

/**
* @param args
* @throws ClassNotFoundException
* @throws IllegalAccessException
* @throws InstantiationException
* @throws NoSuchMethodException
* @throws SecurityException
* @throws InvocationTargetException
* @throws IllegalArgumentException
*/
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
// TODO Auto-generated method stub
// B b = new B();
Class c = Class.forName("b.B");
Object yourObj = c.newInstance();
Method sAge = c.getMethod("m", new Class[] {int.class});
Object[] arguments = new Object[] { new Integer(37)};
//执行方法
sAge.invoke(yourObj , arguments);

}

}

不可以,可以使用公用的方法,反射机制不能调用私有方法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lilefeel
2015-01-18 · 超过16用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:30.8万
展开全部
class B{
private void m(){System.out.println("say B");}
}
A类入口
Class classB = 包名.B.class;
try {
B b = (B)classB.newInstance();
Method method = classA.getDeclaredMethod("m");
method.setAccessible(true);
method.invoke(b);
} catch (Exception e) {
e.printStackTrace();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c70d8e3
2015-01-16 · TA获得超过380个赞
知道小有建树答主
回答量:430
采纳率:0%
帮助的人:279万
展开全部
可以的
Method[] methods = clazz.getDeclaredMethods();

System.out.println("MethodDeclaration in " + clazz.getName());

for(Method method : methods){

method.setAccessible(true);

System.out.println(method.getName());

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8ef85e3
2015-03-21 · 超过55用户采纳过TA的回答
知道小有建树答主
回答量:139
采纳率:0%
帮助的人:85万
展开全部
java api class中有一个方法可以取消访问限制检查.可以调用...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式