如何限制我的方法可见性

时间:2014-06-30 23:28:11

标签: java methods access-modifiers

我现在正在学习Java中的方法/类访问控制,而且除了公共之外,我在设置此方法时遇到了一些麻烦。理想情况下,我希望TestLibJavaApplication8不可见,因为在程序中可以使用TestLib中的方法而无需查看源代码。这就是我现在所拥有的:

TESTLIB:

package testlib;
import java.awt.Robot;
public class TestLib {
    private static void moveMouse(int x, int y){
        try{
            Robot robot = new Robot();
            robot.mouseMove(x, y);
        }catch(Exception e){
            System.out.println("Error");
        }
    }
}

JavaApplication8:

package javaapplication8;

import testlib.TestLib;

public class JavaApplication8 {
    public static void main(String[] args) {
       TestLib.moveMouse(10, 20);
    }
}

我不允许访问TestLib.moveMouse(x, y),除非我将方法设置为公开,我很确定这是不好的做法。我怎么能绕过这个?

谢谢!

3 个答案:

答案 0 :(得分:1)

没有visibility levels这样的东西在java中只有access levels。可见性是关于程序员(人类)。您需要编译代码并提供JAR。这将允许人们在不看内部细节的情况下使用代码。但是,所有api都将始终可见。

公共,受保护,私有是访问级别。它们控制方法可以使用的级别(未查看)。

答案 1 :(得分:0)

您想要的是moveMouse()仅在包范围内可见。也就是说,只有在同一个包中的方法才能看到moveMouse()。要实现此目的,请使用default修饰符而不是public。所以该方法现在看起来像:

default static void moveMouse(int x, int y){
    try{
        Robot robot = new Robot();
        robot.mouseMove(x, y);
    }catch(Exception e){
        System.out.println("Error");
    }
}

由于moveMouse()位于package testlibpackage javaapplication8无法看到它。

答案 2 :(得分:0)

  

想要从最终用户隐藏TestLib的来源,我想   在它完成时将其分发为库。

此处,access modifiers中的可见性与此无关。

虽然您通过jar文件分发它,但可以对这些类进行反编译并获取源代码。有成千上万的反编译器。 (例如jd-gui)。所以,在这里你应该使用Java安全性。(例如:数字签名的jar等)保护源不受最终用户的影响。

此处获得oracle的可见性(以编程方式)的奖励信息。

enter image description here

参考文献: Protect jars from visibility - google