在 Java API/Jar 中隐藏 Public 方法

Hiding Public Methods in Java API/Jar

我正在准备一个 Android Java 罐子,其中有一些 public 方法。我的要求是我想在 jar 中隐藏某些 public 方法,即开发人员不应该能够直接(他可以通过反射间接使用它)使用我提供的 jar him/her.

在 AOSP 中,我看到这是使用 @hide 注释完成的,但同样对我不起作用。

请多多指教。

使方法不是 public。或者,不要运送 JAR。在 Java JAR 中,没有让东西 public 但不可用的概念。

In AOSP, I see this is done using @hide comment, but the same is not working for me.

AOSP 创建了两个 JAR。一个在编译时使用,它不包含 @hide-注释项。该 JAR 不包含在 APK 文件中。在运行时,使用一个单独的 JAR,它确实包含 @hide-注释的项目。这是可能的,因为 Android 控制运行时类路径。

对于不想被外部访问的方法,需要使用private(或protected)修饰符。

我假设在您的情况下,您希望将某些方法定义为 public,因为这是您在代码中访问它们的简单方法,也许是因为您需要在不同的包中使用它们。

我不知道你的 API 是如何实现的,但要实现你想要的,你需要在 design/architecture 中进行一些更改。你有几种可能性:

  • 将您的 class 定义为 final 并将方法定义为 protected
  • 通过接口公开您的 API 而不是 class 直接
  • 实施外观 class,这将公开逻辑。参见 Facade pattern
  • 实现包装器 classes(这可能也是最终的,并且您的方法受到保护)。参见 Wrapper-Decorator