【问题标题】:Accesing Private Methods in java? [closed]在java中访问私有方法? [关闭]
【发布时间】:2012-09-30 19:34:28
【问题描述】:

如何实现这样的功能来访问私有成员?

Java 仅在编译期间检查访问权限。你惊喜吗?得知这个事实,我感到非常惊讶。

因此您可以创建第三方类的骨架(即使是空实现)。有趣的方法应该被保护而不是私有。现在编写您的子类并针对您的存根进行编译。然后只打包您的子类并尝试使用“真实”类运行它。它应该工作。 当我必须访问私有方法或字段时,我尝试过它,它对我来说效果很好。

参考。 https://stackoverflow.com/a/4440051/1312423

【问题讨论】:

  • 问号在哪里?有问题吗?
  • 你刚刚问了我错过了什么吗??
  • 标记..顺便说一句#ME #notsurprised。
  • 您可以使用反射并调用设置。大惊喜。你可以编译一个忽略它的JVM。从本质上讲,不要相信不受您控制的计算机。我们都已经知道了。
  • 有一个链接指向为问题“如何覆盖私有方法?”提供的答案。想知道如何实现这样的功能。

标签: java methods private overriding


【解决方案1】:

Java 仅在编译期间检查访问权限。你感到惊讶吗?

是的,因为它也会在运行时检查访问修饰符。


我开始

public class AnotherClass {
    protected static void printMe() {
        System.out.println("Hello World");
    }
}

public class Main {
    public static void main(String... args) {
        AnotherClass.printMe();
    }
}

它会编译并运行。

如果我将printMe() 更改为private 而不重新编译Main,它会编译,但是当我运行Main 时,我得到了。

Exception in thread "main" java.lang.IllegalAccessError: tried to access method AnotherClass.printMe()V from class Main
    at Main.main(Main.java:22)

【讨论】:

  • 如果您将访问说明符从受保护更改为私有,您甚至无法编译...
  • 可以编译AnotherClass,无需重新编译Main
  • 你总是可以用私有方法编译任何类。
  • 自行编译一个类,您可以将所有内容设为私有。
  • 谢谢,但如果您能回答,我无法将您的答案标记为已接受,尽管它已经关闭,但请看看我在问什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 2021-04-03
  • 2010-11-23
  • 2012-11-06
  • 1970-01-01
  • 2011-07-04
  • 1970-01-01
相关资源
最近更新 更多