我的 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/