我们有一个共享实用程序项目、两个独立的 SDK 项目(每个都指实用程序)和一些插件项目,每个项目都只使用其中一个 SDK。 Shared Utilities 包含一些全静态类,这些类需要对提到的插件可见,但我们希望对它们隐藏其余类。
我们如何着手解决这个问题?我们希望构建过程尽可能简单(我们使用 Ant 进行构建)并尽可能减少依赖性。
以下是我们迄今为止考虑过的选项以及我们放弃每种方法的原因:
- 第二个 Shared Utilities 项目将提供给插件 - 将使部署更加困难。
- 从 Shared Utils 项目构建 2 个单独的 .jar-s,一个只包含全静态实用程序,另一个 - 任何需要隐藏的东西。这会使构建更加复杂,即对插件构建脚本的额外依赖。
- 代理每个 SDK 中的全静态类 - 重复方法定义,但实现只是从共享项目中调用相应的静态方法 - 似乎最轻松,缺点是我们需要手动复制 Javadoc。是否有一个简单的 Javadoc 标记,可以在生成时自动执行此操作?
- 将所有静态类转换为“普通”类并在每个 SDK 中简单地创建子类 - 不必要的(在我看来)性能开销。
最佳答案
“通过代理类暴露静态方法” 我已经阅读了您的完整问题,但我不确定您的问题到底是什么。 通过代理(实例)公开静态(非实例相关)方法。
您不想对什么隐藏什么。您想公开什么。
public class A {
private A(){} //prevent instanciation
public static void doSomething(){} //want to expose to some class, hide from other
}
要限制 doSomething 的展示,您可以设置可见性:Controlling Access to Members of a Class .
您还可以删除静态性质并使用静态工厂模式返回对象,例如:
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 的方式访问...我必须准确理解你想要做什么。
关于java - 通过代理类公开静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18588766/