私はインターフェイスを持っています:
_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);
}
}
}
_
Kotlinで単一メソッドインターフェイスの匿名実装を作成するにはどうすればよいですか?
TileSet
の代わりに_(Int, Int) -> Boolean
_を使用する場合の方法は知っていますが、型には関数のシグネチャではなく、わかりやすい名前が必要です。
documentation には、匿名クラスの例がありますが、インターフェイスの例はありません。
これは、インターフェイスのインスタンスを作成する方法です。
fun TileSet.union(another: TileSet) : TileSet =
object : TileSet {
override fun contains(x: Int, y: Int) : Boolean =
[email protected](x, y) || another.contains(x, y)
}
ドキュメントの例とは異なり、object : TileSet
の後に括弧はありません。