Java 默认访问级别(包私有访问)。为什么它用于?

Java default access level (package private access). Why it is used for?

虽然我知道默认(包)访问级别在 java 中是如何工作的,但我无法想象它在应用程序中的实际用途,除了那些具有独特包的应用程序。您在业务(通常是多包)java 应用程序中使用什么默认访问级别?

大多数情况下,我将该访问权限用于单元测试。在这种情况下,我必须更改我的一些 private 方法以授予它们包访问权限,以便测试它们。当然,您的单元测试应该遵循与实际代码相同的包结构。

当客户端代码不需要知道正确的 class 实现接口并通过工厂方法或构建器初始化它时,我会使用它们,因为 class 本身可能非常复杂处理。

例如

界面

package foo.bar;

public interface FooBarInterface {
}

接口的实现

package foo.bar;

class FooImpl implements FooBarInterface {
}

package foo.bar;

class BarImpl implements FooBarInterface {
}

工厂方法:

package foo.bar;

public class FooBarInterfaceCreator {
    public static FooBarInterface create(String param) {
        //creates instance based on parameters...
    }
}

使用包私有 classes 的一个非常常见的模式是创建 shared 接口的实现或公共 [=] 的共享子classes 20=]es.

请注意,共享的事实在这里很重要,因为内部 classes 提供了一个更好的选择来隐藏调用者的 class / 接口实现。

另一个常见用途是 "utility classes",当您希望在不同的 class 之间共享一组算法 "horizontally",而不会将这些算法暴露给 [=] 的外部用户20=] 图书馆。各种参数检查器都属于这一类。