java反射,调用private的方法 80
前提是不同包下,可以调用,类A可以通过反射调用类B中的privateM()方法不?不可以的话,说下原因。可以的话贴下代码。不懂的别乱说,谢谢。看好了,不同包...
前提是不同包下,可以调用,类A可以通过反射调用类B中的private M()方法不?不可以的话,说下原因。可以的话贴下代码。不懂的别乱说,谢谢。看好了,不同包
展开
6个回答
展开全部
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
展开全部
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);
}
}
不可以,可以使用公用的方法,反射机制不能调用私有方法。
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);
}
}
不可以,可以使用公用的方法,反射机制不能调用私有方法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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();
}
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();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以的
Method[] methods = clazz.getDeclaredMethods();
System.out.println("MethodDeclaration in " + clazz.getName());
for(Method method : methods){
method.setAccessible(true);
System.out.println(method.getName());
}
Method[] methods = clazz.getDeclaredMethods();
System.out.println("MethodDeclaration in " + clazz.getName());
for(Method method : methods){
method.setAccessible(true);
System.out.println(method.getName());
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
java api class中有一个方法可以取消访问限制检查.可以调用...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询