将静态方法放入接口中是一种好习惯吗?

时间:2019-07-10 17:54:15

标签: java methods interface static

假设我在类getAverageDifficulty中有一个方法Difficulty像这样:

public static Float getAverageDifficulty (List<Difficulty> difficultyList) {

    ...
    return average;

}

我的方法显然需要是静态的,因为不需要Difficulty的实例是没有意义的。现在让我们说我正在使用接口IDifficulty,以便稍后可以更改实现。显然,我确实希望getAverageDifficulty可以使用我的IDifficulty方法,并且由于我无法声明静态方法摘要,因此显而易见的选择是将getAverageDifficulty直接放在我的界面中。我的问题是:将静态方法放入接口中是否会出错,该接口包含等待执行的其他Difficulty方法?我不应该混合使用静态和“普通”接口抽象方法吗?我应该创建DifficultyHelper类并将其方法放在那里吗?

2 个答案:

答案 0 :(得分:3)

最终,这是一个风格问题。但是,如果帮助器类的唯一目的是保留此方法(可能还有一些类似的方法),则可以通过将它们放在接口中来保存自己的一个类定义:

  

从Java 8开始,消除了接口不能包含静态方法的限制,因此通常没有理由为接口提供不可实例化的伴随类[Effective Java,第3版]。

答案 1 :(得分:0)

接口中的静态方法与默认方法类似,不同之处在于我们无法在实现这些接口的类中覆盖这些方法。因此,我认为不必在接口中编写静态方法,除非您想防止覆盖。 / p>