我正在深入研究Java 8的创新,我试图调用一个高级接口中实现的默认方法,即使子类覆盖了它。如果我回到在我的BusinessLogic类中实现Comparator,我不会有任何问题,但我想知道是否有一些魔法让我使用新的::操作符。
代码:
代码:
public interface IdEntity extends Comparable<IdEntity> {
int getId();
@Override
default int compareTo(IdEntity other) {
return getId() - other.getId();
}
}
public class Game implements IdEntity {
@Override
public int compareTo(IdEntity o) {
if (o instanceof Game) {
Game other = (Game) o;
int something;
// logic
return something;
}
return super.compareTo(o);
}
}
public class BusinessLogic {
private void sortList(List<? extends IdEntity> list) {
// for Game, Game::compareTo gets called but I want, in this call only, the default method
Collections.sort(list, IdEntity::compareTo);
}
}
Comparator
吗?正如我所说,没有什么问题,但这看起来像是使用::
的理想情况,直到我发现 lambda 表达式会转换为运行时类型。因此,我想知道是否可以仍然使用更改进的语法。 - blagaeIdEntity
和Game
可以实现这一点。 - Louis Wasserman