我正在寻找一种方法,让默认值在作为参数传递时代替空值。我的动机纯粹是减少编写的代码量(我想避免函数/构造函数重载或手动执行“如果为null”检查)
我的用例是在Spring RestController中,我希望使用控制器调用的方法的默认值,而无需在函数外声明这些默认值。
我认为也许使用命名参数可能会提供此功能,但我的实验却显示了其他情况。猫王操作员也许有办法吗?
示例代码:
fun someFunction(first: Long = 1, second: Int = 2 ) {
// Do something
}
@GetMapping
fun someEndpoint(@RequestParam("first") firstParam: Long?):ResponseEntity<Any> {
someFunction(firstParam) // Attempt 1: "Required: Long\n Found: Long?
someFunction(first = firstParam) // Attempt 2: Same error
}
希望您能提供帮助
答案 0 :(得分:2)
没有任何特定的语言功能可以为您完成此操作,默认参数机制没有以任何方式与可空性相关。
但是,您可以通过以下方式以更手动的方式实现此目的:将您的参数设置为可为空,如果参数为null,则立即在函数内替换默认值:
fun someFunction(first: Long? = null, second: Int? = null) {
val actualFirst: Long = first ?: 1
val actualSecond: Int = second ?: 2
// Do something with actualFirst and actualSecond
}
答案 1 :(得分:1)
@RequestParam批注具有名为“ defaultValue”的默认值选项。 您可以像这样使用它:
@GetMapping
fun someEndpoint(@RequestParam(name = "first", defaultValue = "1") firstParam: Long):ResponseEntity<Any> {
someFunction(firstParam) // firstParam equals to 1 if null was passed to the endpoint
}