我现在正在学习Java中的方法/类访问控制,而且除了公共之外,我在设置此方法时遇到了一些麻烦。理想情况下,我希望TestLib
对JavaApplication8
不可见,因为在程序中可以使用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)
,除非我将方法设置为公开,我很确定这是不好的做法。我怎么能绕过这个?
谢谢!
答案 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 testlib
,package javaapplication8
无法看到它。
答案 2 :(得分:0)
想要从最终用户隐藏TestLib的来源,我想 在它完成时将其分发为库。
此处,access modifiers中的可见性与此无关。
虽然您通过jar文件分发它,但可以对这些类进行反编译并获取源代码。有成千上万的反编译器。 (例如jd-gui)。所以,在这里你应该使用Java安全性。(例如:数字签名的jar等)保护源不受最终用户的影响。
此处获得oracle的可见性(以编程方式)的奖励信息。