在 Java 8中使用默认方法作为特性的穷人版本是一种安全的做法吗?
有人声称如果你只是为了它而使用它们可能会让熊猫感到难过,因为它很酷,但这不是我的意图。人们还经常提醒,引入默认方法是为了支持 API 演化和向后兼容性,这是真的,但这并不会导致将它们用作特征本身是错误的或扭曲的。
我想到了以下实际用例:
public interface Loggable {
default Logger logger() {
return LoggerFactory.getLogger(this.getClass());
}
}
或者,也许,定义一个PeriodTrait
:
public interface PeriodeTrait {
Date getStartDate();
Date getEndDate();
default isValid(Date atDate) {
...
}
}
诚然,可以使用组合(甚至是辅助类),但它看起来更加冗长和混乱,并且不允许从多态中受益。
那么,使用默认方法作为基本特征是否可以/安全,还是我应该担心不可预见的副作用?
关于 SO 的几个问题与 Java 与 Scala 特征有关;这不是重点。我也不仅仅是征求意见。相反,我正在寻找一个权威的答案,或者至少是现场洞察力:如果你在你的公司项目中使用默认方法作为特征,那它是不是一个定时炸弹?