【发布时间】:2020-03-30 09:26:15
【问题描述】:
我目前正在研究一个接口,该接口具有一个简单的功能,所有扩展此接口的类都应实现该功能。 但是这些类应该可以像这样使用不同的函数参数调用
interface IDoSomething<T> {
fun execute(vararg any: Any?): T // Make function arguments interchangeable
}
class DoSomethingA : IDoSomething<String> {
// This is what i want
override fun execute(int: Int, boolean: Boolean): String {
println("Do something with parameters: $int, $boolean")
...
}
// This is what i need to do
override fun execute(vararg any: Any?): String {
val int = any[0] as Int
val boolean = any[1] as Boolean
println("Do something with parameters: $int, $boolean")
...
}
}
实现这个接口的其他类应该可以有其他参数
class DoSomethingB : IDoSomething<String> {
// Should also be possible with same interface
override fun execute(string: String, double: Double, boolean: Boolean): String {
println("Do something with parameters: $string, $double, $boolean")
...
}
}
Kotlin 中有什么东西可以帮助我做这样的思考吗?或者存在一种有助于解决这类问题的模式。
【问题讨论】:
-
这违背了接口的目的。在不知道具体实现的情况下,您将无法调用该函数,因此最好从接口定义中删除该方法。但是您可以使用泛型定义一组固定的参数,然后当有一组特定参数类型的多个实现时可能会有用。