如何摆脱这种“警告:表达式未使用”的警告?

时间:2019-01-23 22:43:43

标签: object kotlin compiler-warnings

试图弄清楚为什么我在此代码中得到警告。

object Test {
  val bar = true

  operator fun invoke(foo: Test.() -> Boolean): Boolean {
    return foo()
  }
}

fun main(args: Array<String>) {
  println(Test {bar})
}

编译时会得到这个

  

test.kt:5:12:警告:表达式未使用
  返回foo()

但是肯定可以使用它,因为运行时确实会得到true

2 个答案:

答案 0 :(得分:5)

foo()上显式调用this将使警告消失:

第一种方式:

operator fun invoke(foo: Test.() -> Boolean): Boolean {
    return this.foo()
}

第二种方式:

operator fun invoke(foo: Test.() -> Boolean): Boolean {
    return foo(this)
}

由于在这种情况下您应该可以省略this,所以我认为这是编译器中的错误。


如果您只想警告警告消失,则可以在语句级别使用@Suppress批注:

operator fun invoke(foo: Test.() -> Boolean): Boolean {
    @Suppress("UNUSED_EXPRESSION")
    return foo()
}

您也可以对整个文件,整个类或整个函数执行此操作,但是最好直接在语句中使用它,因为其他未使用的表达式确实可能是您的错误(并非出于故意)然后编译器不会告诉您。

答案 1 :(得分:2)

您发现的这种误报是Kotlin KT-21282中的一个已知问题,因此您可以应用Willi's solutions之一,也可以等待JetBrains修复该错误。