将null用作参数时,是否可以使用非空参数的默认值?

时间:2019-01-10 07:17:54

标签: kotlin parameters null default

我正在寻找一种方法,让默认值在作为参数传递时代替空值。我的动机纯粹是减少编写的代码量(我想避免函数/构造函数重载或手动执行“如果为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
}

希望您能提供帮助

2 个答案:

答案 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
}