通过代理类公开静态方法

时间:2013-09-03 09:32:08

标签: java ant

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

我们如何解决问题?我们希望尽可能简化构建过程(我们将Ant用于构建),并尽可能减少依赖。

这是我们到目前为止所考虑的选项,以及为什么我们放弃了每种方法:

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

1 个答案:

答案 0 :(得分:0)

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

你不想隐瞒什么。你想要揭示究竟是什么。

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的方式访问...我必须完全理解你想要做什么。