Можно ли использовать значение по умолчанию для ненулевого параметра, когда в качестве аргумента передается значение NULL? - PullRequest
0 голосов
/ 10 января 2019

Я ищу способ, чтобы значения по умолчанию заменяли нулями при передаче в качестве аргументов. Моя мотивация - просто уменьшить объем написанного кода (я хочу избежать перегруженных функций / конструкторов или ручных проверок «если ноль»)

Мой вариант использования находится в Spring RestController, я хочу, чтобы значения по умолчанию для метода, вызываемого контроллером, использовались без необходимости указывать эти значения по умолчанию вне функции.

Возможно, я думал, что использование именованных параметров может обеспечить эту функциональность, но мои эксперименты показывают обратное. Возможно, есть способ с оператором elvis?

Пример кода:

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 голосов
/ 10 января 2019

Аннотация @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
}
0 голосов
/ 10 января 2019

Нет никаких специфических языковых возможностей, которые бы сделали это за вас, механизм аргументов по умолчанию никак не связан с обнуляемостью.

Тем не менее, вы можете достичь этого более ручным способом, сделав ваши параметры обнуляемыми и немедленно подставив значения по умолчанию внутри функции, если они равны 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...