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=] 图书馆。各种参数检查器都属于这一类。
虽然我知道默认(包)访问级别在 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=] 图书馆。各种参数检查器都属于这一类。