Java 如何限制我的方法的可见性
我现在正在学习Java中的方法/类访问控制,并且在将这个方法设置为public之外的任何东西时遇到了一些问题。理想情况下,我希望Java 如何限制我的方法的可见性,java,methods,access-modifiers,Java,Methods,Access Modifiers,我现在正在学习Java中的方法/类访问控制,并且在将这个方法设置为public之外的任何东西时遇到了一些问题。理想情况下,我希望TestLib对JavaApplication8不可见,因为程序可以利用TestLib中的方法而不查看源代码。以下是我现在拥有的: TestLib: package testlib; import java.awt.Robot; public class TestLib { private static void moveMouse(int x, int y){
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);
}
}
除非我将方法设置为public,否则我不允许访问TestLib.moveMouse(x,y)
,我很确定这是一种不好的做法。我怎样才能避开这件事
谢谢 您希望
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
不可见,因此在java中不存在可见性级别
这样的东西,只有访问级别
。可见性是关于程序员(人)的。您需要编译代码并提供一个JAR。这将允许人们使用代码而不必看到内部细节。但是,所有api都将始终可见
公共、受保护和私有是访问级别。它们控制可使用(不查看)方法的级别
要对最终用户隐藏TestLib的源代码,我要
完成后,将其作为库分发
在这里,中的可见性与此无关
虽然通过jar文件分发,但可以反编译类并获取源代码。有成千上万的反编译器。(例如)。因此,这里您应该使用Java安全性(例如:数字签名JAR等)来保护源代码不受最终用户的影响
以下是从中获取的可见性奖励信息(按程序)
参考资料:
是否要隐藏源代码并禁止执行?我想对最终用户隐藏TestLib的源代码,我想在完成后将其作为库分发。然后将所有允许调用的方法都作为公共方法,并将源代码编译成jar文件,这样用户就可以使用,但他们看不到来源你完全误解了能见度水平;它们与源代码无关。啊,我当时误解了,我的错!使用正确的可见性级别仍然很好,我想,最好现在就把它记下来。如果我收到一个错误,说我的java版本不支持
default
?有没有其他方法可以做到这一点?利用公众视线真的那么糟糕吗?我在开源和封闭源码之间徘徊,所以如果我采用开源,那么将所有方法都作为公共方法在任何方面都是有害的吗?“default”修饰符并不意味着将“default”放在方法前面。这意味着根本不需要修改。两件不同的事情<方法上的代码>默认值只支持Java 8接口中的默认方法。嗯,好吧,所以无论我是开源还是开源,都不会有什么区别,但如果我将库中的所有方法都设置为公共,这是一件坏事吗?@Nathan取决于库中的方法。@user3580294,解释一下?