21
我有一個接口:如何創建一個接口的匿名實現?
interface TileSet {
fun contains(x: Int, y: Int) : Boolean
}
我希望能夠創建組瓦片協會(瓦是一對x和y整數座標):
fun TileSet.union(another: TileSet) : TileSet =
// ..
在Java 8,我能做到這一點是這樣的:
@FunctionalInterface
public interface TileSet {
boolean contains(int x, int y);
public default TileSet unite(TileSet another) {
return (x, y) -> TileSet.this.contains(x, y) && another.contains(x, y);
}
}
因此,一個接口與TileSet#unite()
拉姆達實現。
public default TileSet unite(TileSet another) {
return new TileSet() {
@Override
public boolean contains(int x, int y) {
return TileSet.this.contains(x, y) && another.contains(x, y);
}
}
}
如何創建一個匿名的實施科特林單方法接口:或者,它可能與舊的匿名類的方法來實現?
我知道該怎麼做,如果我使用(Int, Int) -> Boolean
而不是TileSet
,但我希望該類型具有描述性名稱而不僅僅是一個函數簽名。
我得到'對象必須聲明爲抽象或實現抽象成員public abstract operator.'爲什麼? – Caipivara
@danielgomezrico這必須是因爲你的基類/接口(在我的例子中是'TileSet')聲明瞭一個抽象方法,並且你應該在你的匿名實現中實現它。 – gvlasov