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