【问题标题】:Access an object from another class in private method在私有方法中从另一个类访问对象
【发布时间】:2018-04-19 05:39:03
【问题描述】:

如何在 Java 的私有方法中从另一个类访问对象?

从另一个类调用私有方法的简单示例。

文件:A.java

public class A {  
  private void message(){System.out.println("hello java"); }  
} 

文件:MethodCall.java

import java.lang.reflect.Method;  
public class MethodCall{  
public static void main(String[] args)throws Exception{  

    Class c = Class.forName("A");  
    Object o= c.newInstance();  
    Method m =c.getDeclaredMethod("message", null);  
    m.setAccessible(true);  
    m.invoke(o, null);  
}  
}  

【问题讨论】:

  • 实际上您展示的代码中没有大问题。为什么你认为它不起作用?
  • 这不是问题。该问题的解决方案作为示例给出
  • 您可以使用“反射”来做到这一点。

标签: java class oop object private-methods


【解决方案1】:

由于 private 仅在声明的类中使用,并且不能从其他类中调用。如果要使用,请修改为protected或public后使用。

【讨论】:

  • 当然可以,借助Reflection API 的魔力。
  • @SergeyProkofiev 上述代码中反射API的使用能否成为解决不使用private问题的通用解决方案?这是一个临时解决方案。
  • “临时解决方案”是什么意思?当然作者应该仔细检查为什么需要调用私有方法,但从技术上讲这是完全可能的,所以你的陈述是不正确的。
  • @MinKyuJeong 你可以使用“反射”来做到这一点。
【解决方案2】:

通常私有方法只能从同一个类中访问。无法从外部类访问私有方法。但是,有一种方法可以从外部类访问私有方法。

import java.lang.reflect.Method;

public class PriavteMethodAccessTest{  

public static void main(String[] args)throws Exception{  

    A test = new A();
    Class<?> clazz = test.getClass();
    Method method = clazz.getDeclaredMethod("message");
    method.setAccessible(true);
    System.out.println(method.invoke(test));
}  
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2012-10-11
    • 2013-06-06
    相关资源
    最近更新 更多