Java 8 默认方法作为特征:安全?
在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特征有关;这不是重点。我也不仅仅是征求意见。相反,我正在寻找一个权威的答案,或者至少是现场见解:如果你使用默认方法作为你公司项目的特征,它是否被证明是一个定时炸弹?