Kotlin: явно безымянные аргументы функции

@FunctionalInterface
interface Fn2<A, B, R> : BiFunction<A, B, R>, (A, B) -> R {
    @JvmDefault
    override operator fun invoke(p1: A, p2: B): R {
        ...

Когда я реализую этот интерфейс:

object: Fn2<Int,Int,Int> {
    override fun invokeEx(accum: Int, i: Int): Int =
    accum + i
}

Я получаю предупреждение:

Предупреждение: (598, 76) Kotlin: соответствующий параметр в супертипе «Fn2» называется «a». Это может вызвать проблемы при вызове этой функции с именованными аргументами.

Есть ли какая-то аннотация, ключевое слово или секретное имя (например, it или _), которые я могу использовать в определении функции invoke(), чтобы избавиться от этих предупреждений. Я признаю, что делаю что-то нестандартное с взаимодействием Java/Kotlin, которое может исчезнуть, когда я закончу рефакторинг, но мне все еще любопытно.

Я знаю, что есть @Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE") (спасибо, злобный демон), но я ищу способ подавить его в сигнатуре функции, которую я переопределяю, а не в реализации.


person GlenPeterson    schedule 04.06.2018    source источник
comment
youtrack.jetbrains.com/issue/KT-9872   -  person Grzegorz Adam Hankiewicz    schedule 23.07.2018


Ответы (1)


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

person yole    schedule 04.06.2018