使用默认方法作为 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 vs Scala特性有关。这不是重点。我也不只是在征求意见。相反,我正在寻找一个权威的答案或至少是对领域的洞察力:如果您在公司项目中使用默认方法作为特质,那是否真是定时炸弹?