在Java 8中使用默认方法作为穷人的特征版本是否安全? 有人说,如果你为了这个目的而使用它们,可能会让pandas伤心 ,因为它很酷,但那不是我的意图。 也常常提醒我们,引入默认方法来支持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特性有关; 这不是重点。 我也不只是要求意见。 相反,我正在寻找一个权威的答案或至less是现场的见解:如果你已经使用默认方法作为企业项目的特征,那么它是否会变成一个时间炸弹?
Java 8引入了默认方法来提供扩展接口的能力,而无需修改现有的实现。 我想知道是否有可能明确调用方法的默认实现时,由于在不同的接口冲突的默认实现,已被重写或不可用。 interface A { default void foo() { System.out.println("A.foo"); } } class B implements A { @Override public void foo() { System.out.println("B.foo"); } public void afoo() { // how to invoke A.foo() here? } } 考虑到上面的代码,你将如何从类B的方法调用A.foo() ?