1
package com.companyxyz.api.person;

public class Man {
    public var1;
    public var2;
    ...
    private static void createAuth() {
    ...
    }
    // public methods go here
    ...
}

我想创建一个访问私有方法createAuth的新公共方法,但在不同的文件中。有没有办法在不编写或通过扩展类访问它的情况下创建这个新方法?

谢谢你。

4

3 回答 3

5

不,您不能从其他类访问私有方法。因为它是……私人的。

于 2013-05-21T19:48:12.417 回答
4

任何外部类(包括子类)都无法访问私有方法。

一种解决方法可能是使用反射,但由于多种原因(脆弱性、性能问题、破坏封装等),这不是通常推荐的方法。

于 2013-05-21T19:48:24.450 回答
1

在 Java 中没有干净且推荐的通用方法来执行此操作。private是私人的。

但是您没有说明为什么要这样做以及具体的限制是什么。因此,我将两个选项混合在一起:

  • 您可以反编译 的类文件Man,设置您想要保护或公开的所有内容并重新编译(并重新打包到 jar 文件中)。也许不需要反编译,也许对类文件进行一些位操作也可以完成这项工作。

  • 您可以使用字节码操作库编写自定义ClassLoader,以在运行时修改类的字节码。然后你还可以为你想要的东西添加额外的访问路径。但是请注意,这是非常高级/复杂的东西。

这两种方式都不是您可以使用/不应该用于普通应用程序或常用框架的方法。

于 2013-05-21T20:20:16.940 回答