我正在为一个 API 方法编写一个测试,该方法可以采用多种数据类型,但显然不是全部。我想找到一种方法,本着String or Int
.
我知道可能的解决方案,但我不喜欢它们:
- 使用类型
Any
是不安全的,而且不知何故一点也不好。 - 不可能重新声明一个已经指定了不同类型参数的函数,一些方法接受许多相似的参数。我知道这必须针对不同类型的每种组合来完成吗?
最小可重现代码的示例:
fun main() {
fun myRequestMethod(
firstParam: Any, //actualy can be ONLY String or Int
secondParam: Any, //actualy can be ONLY String or Int
thirdParam: Any //actualy can be ONLY String or Int
) {
//do api-request
println("$firstParam, $secondParam, $thirdParam")
}
myRequestMethod(1, 2, 3) //acceptible with Any type
myRequestMethod("1", 2, "3") //acceptible with Any type
myRequestMethod(mapOf("1" to 1), listOf(2, 2, 2), "3") //NOT acceptible with Any type
myRequestMethod(1, listOf(1, 2, 3), mapOf("1" to 1)) //NOT acceptible with Any type
}
有没有我找不到的解决方案?谢谢你!
你不能完全按照你想要的方式去做,但你可以
sealed
用两个实现来创建一个类:为了方便起见,还有一些扩展:
相反
Any
,您现在可以使用Param
,并且可以按如下方式调用该方法:当然,这并不是您想要的,但我试图尽可能接近所需的内容。
此外,
sealed
您可以向类添加一些抽象方法,具体取决于您计划如何在代码中使用这些参数。