我正在使用一个在getFile()
类中定义了公共静态方法Utils
的库。该库在内部使用Utils.getFile()
,但这种方法实现得不是很好。
我想知道是否有可能以某种方式覆盖Utils.getFile()
所以它会使用我的实现呢?
答案 0 :(得分:4)
不 - 没有相当多的复制课程并在那里替换它。否则,对于Christian的评论,更好的替代方案可能是+1:Why doesn't Java allow overriding of static methods?
如果它是非静态的并且该方法不是私有的或最终的,那么您可以继承该类,提供您自己的重写方法,并使用它。
答案 1 :(得分:1)
不,你不能覆盖它。静态方法存在这些问题,例如,在编写单元测试时。
答案 2 :(得分:1)
你唯一的选择是替换这个类。您可以编译不同的版本并在类路径中更早版本或替换原始副本。
Java不支持静态方法的多态性(您可以隐藏但不能覆盖静态方法)因此,实用程序类通常会final
来清除它。为了实现这一点,我使用了enum
而没有实例。
public enum Util {;
public static ReturnType method(ParameterTypes... args) {
}
}
答案 3 :(得分:0)
通过获取库的源代码并重新创建jar文件来修复代码。尝试使用JAD(以及FrontEndPlus)将.class文件反编译为.java文件。
如果调用在您的代码中,那么您可以使用前缀为该方法的完全限定的Utils类名称。示例:{your namespace} .Utils.getFile()..
答案 4 :(得分:0)
不幸的是,没有。 This answer on StackOverflow explains why that is。您需要创建一个包装类。大多数语言就是这种情况,链接中再次对此进行了解释。