【发布时间】:2019-11-20 09:41:15
【问题描述】:
假设我的班级 Difficulty 中有一个方法 getAverageDifficulty,如下所示:
public static Float getAverageDifficulty (List<Difficulty> difficultyList) {
...
return average;
}
我的方法显然需要是静态的,因为需要Difficulty 的实例是没有意义的。现在假设我正在使用一个接口IDifficulty,所以我可以稍后更改我的实现。显然,我确实希望我的getAverageDifficulty 方法可以从IDifficulty 获得,并且由于我不能声明静态方法抽象,显而易见的选择是将getAverageDifficulty 直接放在我的界面中。我的问题是:我把那个静态方法放在我的界面中是否犯了一个错误,其中包含其他等待实现的Difficulty 方法?我不应该混合静态和“普通”接口抽象方法吗?我应该创建DifficultyHelper 类并将我的方法放在那里吗?
【问题讨论】:
-
你可以只使用流来获取平均值
-
我会把它放在一个 utils 或 helper 类中。把它放在你的难度界面是没有意义的,因为它不依赖于难度。本质上,如果您要称其为不难的任何地方,那么将其放在那里是没有意义的
-
没有好的做法。在特定情况下只有最好的,并且可能有多个答案,都一样好。
-
Matthew 我的意思是,它有点依赖难度,因为它需要一个难度列表作为参数
-
我会使用辅助类。考虑这一点的一种方法是,该方法提供了想要附加到类型“List
”的行为,但该类型不是显式可用的。 (顺便说一句:参数类型可能应该是 'Collection extends Difficulty>'。)请注意,示例方法与接口上的默认方法具有不同的特征。
标签: java methods interface static