将静态方法放在接口中是一种好的做法吗?

问题描述 投票:0回答:2

假设我在课堂上有一个方法

getAverageDifficulty
Difficulty
是这样的:

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

    ...
    return average;

}

我的方法显然需要是静态的,因为需要

Difficulty
的实例是没有意义的。现在假设我正在使用一个接口
IDifficulty
这样我可以稍后更改我的实现。显然,我确实希望我的
getAverageDifficulty
方法可以从
IDifficulty
获得,并且由于我不能声明静态方法抽象,显而易见的选择是将
getAverageDifficulty
直接放在我的界面中。我的问题是:我将静态方法放在我的接口中是否犯了一个错误,该接口包含其他等待实现的
Difficulty
方法?我不应该混合静态和“普通”接口抽象方法吗?我应该创建
DifficultyHelper
类并将我的方法放在那里吗?

java methods interface static
2个回答
4
投票

归根结底,这是一个风格问题。但是,如果辅助类的唯一目的是保存此方法(可能还有一些类似的方法),那么您将通过将它们放在接口中来为自己保存一个类定义:

从 Java 8 开始,接口不能包含静态方法的限制被取消,因此通常没有理由为接口提供非实例化的伴随类 [Effective Java,第 3 版,第 1 项:考虑静态工厂方法而不是 构造函数].


0
投票

接口中的静态方法类似于默认方法,只是我们不能在实现这些接口的类中重写这些方法。所以在我看来,在你想要防止重写之前,没有必要在接口中编写静态方法。

© www.soinside.com 2019 - 2024. All rights reserved.