5

我们有一个 Shared Utilities 项目、两个独立的 SDK 项目(每个都指 Utilities)和一些插件项目,每个项目只使用其中一个 SDK。Shared Utilities 包含一些全静态类,这些类需要对提到的插件可见,但我们希望对它们隐藏其余类。

我们如何着手解决问题?我们希望使构建过程尽可能简单(我们使用 Ant 进行构建),并且尽可能少地依赖。

以下是我们迄今为止考虑的选项以及我们放弃每种方法的原因:

  1. 第二个共享实用程序项目,将提供给插件 - 将使部署更加困难。
  2. 从 Shared Utils 项目构建 2 个单独的 .jar-s,一个仅包含全静态实用程序,另一个包含需要隐藏的任何内容。这将使构建更加复杂,即对插件构建脚本的额外依赖。
  3. 在每个 SDK 中代理全静态类 - 重复的方法定义,但实现只是从 Shared 项目中调用相应的静态方法 - 似乎最轻松,缺点是我们需要手动复制 Javadoc。是否有一个简单的 Javadoc 标记,它会在生成时自动执行此操作?
  4. 将所有静态类转换为“普通”并在每个 SDK 中简单地创建子类 - 不必要的(在我看来)性能开销。
4

1 回答 1

0

“通过代理类公开静态方法”我已经阅读了你的完整问题,但我不确定你的问题到底是什么。通过代理(实例)公开静态(非实例相关)方法。

你不想隐瞒的究竟是什么。你想暴露的究竟是什么。

public class A {

private A(){} //prevent instanciation

public static void doSomething(){} //want to expose to some class, hide from other

}

要限制 doSomething 的展示,您可以设置可见性:控制对成员的访问

您还可以删除静态性质并使用静态工厂模式返回对象,例如:

public class A {

private A(){} 

public void doSomething(){} //want to expose to some class, hide from other

//the new A can also be set in a member variable and 
//return always the same instance, if it is unmuttable it will be thread safe.
public static A getInstance(){ return new A();}

}

这看起来像“同一件事”,但您现在可以通过仅控制 getInstance() 的可见性来控制 A 中所有方法的可见性,javadoc 停留在 A 上,现在可以准确控制 getInstance 的访问方式。 .我必须确切地了解您想要做什么。

于 2013-09-04T13:17:22.550 回答