从另一个访问私有静态方法

Den*_*niz 1 java static-methods private-methods

我有一个私有静态方法的主类.我想从另一个java类访问此方法.我试过一些方法,但是他们没有用.我该如何访问该方法?

像这样的主要班级;

public class RandomGenerate {

    public static void main(String[] args) throws Exception {
        System.out.print.ln("main method");
    }

    private static synchronized void createRandom(PersonObj person, int number, List s) {
        System.out.println("deneme");
    }
}
Run Code Online (Sandbox Code Playgroud)

我想createRandom从另一个像这样的java类调用;

public class Deneme {
    RandomGenerate rg = new RandomGenerate();
    RandomGenerate.createRandom(person, number, sList);
}
Run Code Online (Sandbox Code Playgroud)

然后,netbeans显示方法具有私有访问权限.

Mik*_*son 8

您不应该private从该类外部访问函数/变量.如果需要访问private类的变量,可以getter为该变量创建一个伴随,并getter在类上调用该函数.

对于函数,如果您尝试访问函数的类在同一个包中,或者是具有该函数的类的子类,请更改privateprotected.protected允许同一个包或子类中的成员访问该项,但不包括该包之外的任何内容.

关于可见性的一个很好的解读Java是:http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

这显示了一个表:

                  Access Levels

Modifier    Class   Package Subclass    World

public      Y       Y       Y           Y

protected   Y       Y       Y           N

no modifier Y       Y       N           N

private     Y       N       N           N
Run Code Online (Sandbox Code Playgroud)

  • 如果您只想提供对同一包中其他类的访问,请考虑*default*access(无修饰符),而不是protected. (3认同)

T.J*_*der 6

主要是

如果您需要在类之外使用它,请制作它public(或者protected如果您仅在子类中需要它,或者如果您仅在包中需要它,则默认[根本没有关键字])。如果您需要在课堂外使用它,而private您又无法做到不使用它private,那么这是您应该解决的设计问题。

但...

...您可以使用反射(教程文档)来解决它,它允许您获取方法并调用它,即使它是私有的。一旦你有了这个Method对象,你必须在调用它之前先调用setAccessibleto 。true

但这又是一个解决方法。使用正确的访问修饰符。