java - 调用与具有相同包名的其他函数同名的函数

标签 java

我的 Java 项目有问题,我有一堆项目(例如 A、B、C...)碰巧在 src.tool.Tools 等路径的工具文件夹中有一个 Tools 类,所有这些都具有相同的路径和相同的类名。

现在,我的项目 Z 在其构建路径中包含所有这些项目(A、B、C……)。我如何确保在导入一个工具类时导入的是我真正需要的工具类?

更复杂,如果在 A.Tool 中我有一个方法,例如 public int tool(){return 1} 而在 B.Tool 中有另一个方法,例如 public int tool(){return 0} 我如何确定我调用我真正想要的函数?

谢谢大家!

最佳答案

三个选项:

冒险的方式:确保您真正想要的类在类路径中排在第一位,并且每个涉及的类加载器都按该顺序处理它们。这可以非常容易地打破非常困惑的结果。您无法访问该类的多个版本,您只能控制获得的版本。不要这样做。

复杂的方法:为您依赖的每个项目创建类加载器,并指定特定的类加载器来加载类。要做到这一点需要做很多工作,您可以为此使用 OSGI。仅当您的主要目标是了解类加载器时才这样做。

简单而正确的方法:重构您的项目,使每个项目中的所有包在包名称中都有项目名称(或它的某种表示形式)。这使得每个包名称都是唯一的,并且您可以毫无问题地访问类(如果您必须在一个地方使用多个工具类,则可能使用完整的限定类名)当你这样做时,你不妨重命名工具类实际上描述了目的,像“Util”、“Tool”或“Misc”这样的类和包名是非常糟糕的代码味道。

关于java - 调用与具有相同包名的其他函数同名的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17360022/

相关文章:

java - java web 应用程序运行时在命令提示符中显示进度

java - Spring 集成: TcpInboundGateway read stream closed before @MessageEndpoint writes to out stream

java - 如何在 Java 中检索 Line2D 的坐标

java - 使用 HttpURLConnection 发送帖子

java - 如何让 ArrayList 中的不同对象执行每个类具有的方法 (salaris())

java - HBase无法启动

java - jpa/hibernate 查询返回的实体中包含的过滤器列表

java - 为什么我不能直接使用 Gradles Exec-task 启动 java?

java - 将字符串转换为日期 - 出现错误

java - JTASessionContext 与 JDBCTransactionFactory 一起使用;自动刷新将无法与 getCurrentSession() 一起正确运行