【发布时间】:2021-09-07 11:13:11
【问题描述】:
我正在探索 Substitution 主体,根据我对主体的理解,任何超类型的子类型都应该可以传递给函数/类。在我正在编写的一段新代码中使用这个想法,我想为这样的过滤器实现一个抽象接口
interface Filter {
fun filter(): Boolean
}
然后我会想象这会为所有继承此接口的类创建契约,它们必须实现函数过滤器并返回布尔输出。现在我对此的解释是不需要指定输入。我希望这样,因为我想要一个过滤器接口来保证过滤器方法的实现,并保证返回类型为布尔值。这个概念甚至存在于 Kotlin 中吗?然后我希望像这样实现这个接口
class LocationFilter {
companion object : Filter {
override fun filter(coord1: Coordinate, coord2: Coordinate): Boolean {
TODO("Some business logic here")
}
}
}
但实际上这行不通。我可以从界面中删除删除过滤器方法,但这只会破坏整个练习的重点。我尝试过使用varargs,但这并不能解决问题,因为每个覆盖都必须实现varargs,这没有帮助。我知道这似乎是多余的,但是有没有可能拥有我要求的抽象类型?还是我错过了一个接口?
【问题讨论】:
-
我想我的方法会让界面的订阅者失去知道输入类型的能力。我想那会很糟糕......
-
您能否举例说明如何通过
Filter接口调用filter方法?你会意识到这是不可能的——调用者不知道具体的参数类型和实现需要的参数数量。