是否可以在Java中替换公共静态方法?

时间:2012-01-22 07:57:44

标签: java static-methods

我正在使用一个在getFile()类中定义了公共静态方法Utils的库。该库在内部使用Utils.getFile(),但这种方法实现得不是很好。

我想知道是否有可能以某种方式覆盖Utils.getFile()所以它会使用我的实现呢?

5 个答案:

答案 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。您需要创建一个包装类。大多数语言就是这种情况,链接中再次对此进行了解释。