java - 通过代理类公开静态方法

标签 java ant

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

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

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

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

相关文章:

windows - 从 GIT 存储库构建

java - 如何从txt文件行读取并打印字符串和整数数组

Ant字符串比较

java - Spring Boot Eureka 服务器仪表板错误

java - 如何在docker容器之间连接oracle数据库?

java - 在不同平台上构建大小不同

ant - 确定从 Ant 运行 YUI 压缩器时哪个文件出现错误

java - 开始看到对象堆异常 Java 6

java - 为什么一个私有(private)构造函数的私有(private)内部类可以被子类化?

java - Java HashMap 如何处理具有相同哈希码的不同对象?