问题描述
- java访问private方法求解
-
java里如何从一个类访问另一个类的private方法 求解,就是成员变量我都知道怎么办,方法不懂
解决方案
如果是内部类,可以访问,外部类,就不行了,你还是老老实实遵守面向对象的规则吧
解决方案二:
可以用反射,但是尽量不要破坏规则,别人用private,是有别人自己的用意的。
解决方案三:
Java private方法访问
解决方案四:
既然是私有的当然无法访问 把它改成public就可以啊
解决方案五:
利用反射的原理就对私有的属性进行访问。如果不利用反射是访问不到的
解决方案六:
java没有友元,非要这样就反射吧
解决方案七:
通常来说,既然是私有方法就不应该暴漏给其他类调用。但是你说的问题确实可以通过类反射进行实现。举一个例子如下
package com.zhb.chapter14.rtti;
/**
- 被调用的类
- @author zhaohb
*/
public class InvokedClass {public void sayHelloWorld(){
System.out.println("invoke class say Hello Wolrd");
}private void saySomething(String name){
System.out.println("Hello: " + name);
}
}
package com.zhb.chapter14.rtti;
import java.lang.reflect.Method;
/**
- 反射调用:可以调用私有/公有方法
- @author zhaohb
/
public class InvokeMethod {
/*- 调用共有方法
- @throws Exception
/
@SuppressWarnings({"rawtypes","unchecked"})
public static void callPublicSayHello() throws Exception{
Class clazz = Class.forName("com.zhb.chapter14.rtti.InvokedClass");
Method method = clazz.getDeclaredMethod("sayHelloWorld");
method.setAccessible(true);
Object obj = clazz.newInstance();
method.invoke(obj);
}
/* - 调用私有方法
- @param name
- @throws Exception
*/
@SuppressWarnings({"rawtypes","unchecked"})
public static void callHiddeSaySomething(String name) throws Exception{
Class clazz = Class.forName("com.zhb.chapter14.rtti.InvokedClass");
Method method = clazz.getDeclaredMethod("saySomething", String.class);
method.setAccessible(true);
Object obj = clazz.newInstance();
method.invoke(obj, name);
}
public static void main(String[] args) {
try {
callPublicSayHello();
callHiddeSaySomething("xiaoming");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
参考资料:来自于java编程思想
解决方案八:
private是类私有的,不可以给其他类访问,或者你可以改成public或者就反射吧
解决方案九:
反射是可以,但是请遵守规则
解决方案十:
采用反射获取方法,获取private方法需要使用getDeclaredMethod方法,通过方法名 和 参数列表 来定位方法,得到Method对象,
再采用 invoke方法,传入参数 执行对象 和 方法参数, 即可,
eg:
public class GetMethod {
private void priMethod(){
System.out.println("this is a private method.");
}
public void pubMethod(int a, int b) {
System.out.println("this is a public method. And result of a+b is:" + (a + b));
}
public static void main(String[] args) throws Exception {
Class c = GetMethod.class;
c.getDeclaredMethod("pubMethod", int.class, int.class).invoke(c.newInstance(),1,1);
}
}