gpt4 book ai didi

interface - 如何创建接口(interface)的匿名实现?

转载 作者:IT老高 更新时间:2023-10-28 13:26:50 26 4
gpt4 key购买 nike

我有一个界面:

interface TileSet {
fun contains(x: Int, y: Int) : Boolean
}

我希望能够创建图 block 集的并集(图 block 是一对 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);
}
}

所以接口(interface)是用 TileSet#unite() 中的 lambda 实现的。或者它可以用旧的匿名类方法来实现:

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 中创建单方法接口(interface)的匿名实现?

如果我使用 (Int, Int) -> Boolean 而不是 TileSet,我知道该怎么做,但我希望类型具有描述性名称而不是只是一个函数签名。

最佳答案

documentation 中有示例用于匿名类,但不适用于接口(interface)。

这就是我创建接口(interface)实例的方式:

fun TileSet.union(another: TileSet) : TileSet =
object : TileSet {
override fun contains(x: Int, y: Int) : Boolean =
this@union.contains(x, y) || another.contains(x, y)
}

请注意,与文档中的示例不同,object : TileSet 之后没有括号。

关于interface - 如何创建接口(interface)的匿名实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33552299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com