当前位置: 首页 > 面试题库 >

如何从Java类外部调用私有方法

单于阳
2023-03-14
问题内容

我有一个Dummy具有称为的私有方法的类sayHello。我想sayHello从外面打电话Dummy。我认为应该可以反思,但是我得到了IllegalAccessException。有任何想法吗???


问题答案:

利用setAccessible(true)使用其之前的Method对象的invoke方法。

import java.lang.reflect.*;
class Dummy{
    private void foo(){
        System.out.println("hello foo()");
    }
}

class Test{
    public static void main(String[] args) throws Exception {
        Dummy d = new Dummy();
        Method m = Dummy.class.getDeclaredMethod("foo");
        //m.invoke(d);// throws java.lang.IllegalAccessException
        m.setAccessible(true);// Abracadabra 
        m.invoke(d);// now its OK
    }
}


 类似资料:
  • 我正在装一个应用程序,它工作得很好。但当我使用 在OuterClass中,并通过

  • 我想用PHP在我的简单ORM中实现一个钩子系统: 这会导致一个致命错误: 致命错误:调用私人方法付款::before_save()从上下文'记录'中 有道理。 我可以将范围更改为public,但这似乎很难看:在保存()之前,除了支付之外,没有人与

  • 问题内容: 因此,此代码的输出为。现在,我想到了一个问题:作为 派生 类对象的 po 怎么能调用作为基类的 PrivateOverride 的私有方法? 问题答案: 因为您在类中定义了main方法。如果将main方法放在Derived类中,它将无法编译,因为在该类中不可见。 class中的po.f()调用不是多态的,因为in 类为,所以in class中的值不会被覆盖。

  • 问题内容: 存在问题 如果我有一个像这样的类层次结构: 在实例类型为B的情况下,是否可以从main方法调用A的toString? 当然,像o.super.toString()这样的东西不会编译… 问题答案: 您不能这样做,而且是非常故意的:它会破坏封装。 假设您有一个类,该类使用一种方法通过一些业务规则来验证输入,然后调用超类方法。如果调用方可以忽略该覆盖,那么它将使该类变得毫无意义。 如果发现自

  • 问题内容: public class A{ private int getC(){ return 0; } } 您能告诉我是否有可能通过java中的反射来做一些吸引人的事情吗? 问题答案: class A{ 编辑:这是一个安静的老帖子,但增加了一些建议 重新考虑您的设计 调用父方法的私有方法,虽然可以通过反射实现,但是不应该这样做。在父对象上调用私有方法可能会使类处于无效状态,并可能导致意外行为。

  • 我是一个初学程序员,我已经试着解决这个问题几天了,我不知道还能做什么。你能帮我吗?