首页 > 解决方案 > 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”。当使用命名参数调用此函数时,这可能会导致问题。

是否有某种注释或关键字或秘密名称(如itor _),我可以在invoke()函数定义中使用它们来消除这些警告。我承认我正在使用 Java/Kotlin 互操作做一些非标准的事情,当我完成重构时可能会消失,但我仍然很好奇。

我知道有一个@Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")谢谢 evilbloodydemon),但我正在寻找一种方法来在我覆盖的函数签名处抑制它,而不是在实现中。

标签: kotlinargumentsnamed

解决方案


从 Kotlin 1.2.40 开始,不可能将函数参数标记为显式未命名,而且我不知道有任何计划添加这种可能性。


推荐阅读