ChatGPT解决这个技术问题 Extra ChatGPT

在 Kotlin 中标记未使用的参数

我正在定义一些用作回调的函数,但并非所有函数都使用它们的所有参数。

如何标记未使用的参数,以便编译器不会给我关于它们的警告?


a
aaaidan

使用 @Suppress 注释,您可以禁止对任何声明或表达式进行任何诊断。

示例:禁止参数警告:

fun foo(a: Int, @Suppress("UNUSED_PARAMETER") b: Int) = a

禁止声明中的所有 UNUSED_PARAMETER 警告

@Suppress("UNUSED_PARAMETER")
fun foo(a: Int,  b: Int) {
  fun bar(c: Int) {}
}

@Suppress("UNUSED_PARAMETER")
class Baz {
    fun foo(a: Int,  b: Int) {
        fun bar(c: Int) {}
    }
}

此外,IDEA 的意图(Alt+Enter)可以帮助您抑制任何诊断:

https://i.stack.imgur.com/T9TxX.png


谢谢。有没有办法将它缩短为 [未使用] 之类的?我尝试了 annotation class unused : suppress("UNUSED_PARAMETER"),但由于抑制是最终的,它不起作用。
您应该可以省略括号,这样可以节省两个字符:)
此外,您可以提取和共享注释参数。
我的评论适用于旧的,现已删除的注释语法,不再有效。
我有带有多个参数的侦听器方法,但只使用了一个。我能够在方法上方设置 @Suppress("UNUSED_PARAMETER")。因此,总共四个未使用的所有三个参数都被涵盖了:)
M
Mike

如果您的参数在 lambda 中,您可以使用下划线来省略它。这将删除未使用的参数警告。如果参数为 null 并且被标记为非 null,它还将阻止 IllegalArgumentException

请参阅https://kotlinlang.org/docs/reference/lambdas.html#underscore-for-unused-variables-since-11


J
Justin Fiedler

如果函数是类的一部分,您可以将包含类 openabstract 以及有问题的方法声明为 open

open class ClassForCallbacks {
  // no warnings here!
  open fun methodToBeOverriden(a: Int, b: Boolean) {}
}

或者

abstract class ClassForCallbacks {
  // no warnings here!
  open fun methodToBeOverriden(a: Int, b: Boolean) {}
}

M
MatPag

可以通过在 build.gradle 中添加 kotlin 编译选项标志来禁用这些警告。要配置单个任务,请使用其名称。例子:

compileKotlin {
    kotlinOptions.suppressWarnings = true
}

compileKotlin {
    kotlinOptions {
        suppressWarnings = true
    }
}

也可以在项目中配置所有的 Kotlin 编译任务:

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    kotlinOptions {
        // ...
    }
}

如果有人在 Android 中使用 kotlin 并且想要抑制 kotlin 编译器警告,请在 app-module build.gradle 文件中添加以下内容

android{
    ....other configurations
    kotlinOptions {
        suppressWarnings = true
    }
}

无论您是否真的需要为您的项目取消所有 kotlin 警告,都取决于您。


为什么有人会压制整个项目的警告?这不是一个好习惯。
@“Mahendra Chhimwal”谢谢!最后,我可以全局禁用 Jetbrain 烦人的样式警告。现在我可以在没有 Jetbrain 不需要的、不需要的、侵入性的警告骚扰的情况下编写个人项目。如果不是为了这个修复,我会切换到 VSCode。