bla*_*gae 4 java lambda inheritance java-8
我正在深入研究Java 8创新,我正在尝试调用我在高级接口中实现的默认方法,即使子类重写它也是如此.我可以毫不费力地回到Comparator
我的BusinessLogic
班级实现一个,但我想知道是否有一些魔法可以让我使用漂亮的新东西::
.
码:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
一种方法是将compare方法放在静态方法中:
public static interface IdEntity extends Comparable<IdEntity> {
int getId();
@Override default int compareTo(IdEntity other) {
return defaultCompare(this, other);
}
static int defaultCompare(IdEntity first, IdEntity second) {
return first.getId() - second.getId();
}
}
Run Code Online (Sandbox Code Playgroud)
然后你的方法是:
Collections.sort(list, IdEntity::defaultCompare);
Run Code Online (Sandbox Code Playgroud)
更简单的方法:静态导入Comparator.comparingInt
和使用
Collections.sort(list, comparingInt(IdEntity::getId));
Run Code Online (Sandbox Code Playgroud)
我不相信你可以重新提取默认compareTo
实现:它被覆盖了; 您通常无法运行重写方法实现.但这只会直截了当地工作.
归档时间: |
|
查看次数: |
700 次 |
最近记录: |