假设我在课堂上有一个方法
getAverageDifficulty
Difficulty
是这样的:
public static Float getAverageDifficulty (List<Difficulty> difficultyList) {
...
return average;
}
我的方法显然需要是静态的,因为需要
Difficulty
的实例是没有意义的。现在假设我正在使用一个接口 IDifficulty
这样我可以稍后更改我的实现。显然,我确实希望我的 getAverageDifficulty
方法可以从 IDifficulty
获得,并且由于我不能声明静态方法抽象,显而易见的选择是将 getAverageDifficulty
直接放在我的界面中。我的问题是:我将静态方法放在我的接口中是否犯了一个错误,该接口包含其他等待实现的Difficulty
方法?我不应该混合静态和“普通”接口抽象方法吗?我应该创建 DifficultyHelper
类并将我的方法放在那里吗?
归根结底,这是一个风格问题。但是,如果辅助类的唯一目的是保存此方法(可能还有一些类似的方法),那么您将通过将它们放在接口中来为自己保存一个类定义:
从 Java 8 开始,接口不能包含静态方法的限制被取消,因此通常没有理由为接口提供非实例化的伴随类 [Effective Java,第 3 版,第 1 项:考虑静态工厂方法而不是 构造函数].
接口中的静态方法类似于默认方法,只是我们不能在实现这些接口的类中重写这些方法。所以在我看来,在你想要防止重写之前,没有必要在接口中编写静态方法。