在Java 8中,使用默认方法作为traits的替代品是否是一种安全实践?
有人声称如果你只是出于酷而使用它们,则可能会让熊猫感到悲伤,但这并不是我的意图。通常提醒我们,默认方法是为了支持API演进和向后兼容而引入的,这是真的,但这并不意味着将它们用作trait本身就是错误或扭曲的。
我有以下实际用例:
public interface Loggable {
default Logger logger() {
return LoggerFactory.getLogger(this.getClass());
}
}
或者,定义一个PeriodTrait
:
public interface PeriodeTrait {
Date getStartDate();
Date getEndDate();
default isValid(Date atDate) {
...
}
}
可以承认,可以使用组合(或甚至辅助类),但这似乎更冗长和混乱,并且不允许从多态性中受益。
因此,将默认方法用作基本特征是否安全?还是我应该担心意想不到的副作用?
有几个问题与Java vs Scala traits有关;这不是重点。 我也不仅仅是询问意见。 相反,我正在寻找权威答案或至少领域洞察力:如果您在公司项目中将默认方法用作特征,结果是否会成为定时炸弹?