禁止方法或类的“使用属性访问语法”

Pav*_*lus 3 java lint kotlin

在我的项目中,我有一个委托(用 Java 编写)用于通过 RPC 获取数据,其中大多数方法以“get”开头,有些方法不需要参数,因此 Kotlin 建议用属性访问语法替换对它们的调用,而它们不是实现属性语义(好吧,因为它们执行网络请求),所以我想在默认情况下禁止对所有这些方法使用进行所有此类检查,而不是代替每次调用(是的,我知道@Suppress块的注释,并且它的工作原理与我需要的完全相反)。

除了重命名它们以便它们不会以“get”开头之外,还有其他解决方案吗?

Xvo*_*lks 5

我想您使用的是 IntelliJ IDEA。

你可以去Preferences, Editor, Inspection, Kotlin, Accessor call that can...取消选中它。(或输入property syntax搜索过滤器)。

这将在您的整个项目中禁用此警告。您还可以将严重性更改为适合您需要的其他内容。

编辑:您可以使用@Suppress注释。

假设您有一个名为A公开方法的 Java 类:

  • getA() 这是一个常规的 Java bean 访问,
  • getB() 例如,这是一个网络电话。

你可以写:

fun main(args: Array<String>) {
    val a = A()
    println(a.a)
    @Suppress("UsePropertyAccessSyntax")
    print(a.getB())
}
Run Code Online (Sandbox Code Playgroud)

@Suppress可以在多个级别使用。请参阅文档

IntelliJ IDEA 对抑制这些警告有很好的帮助。 想法屏幕截图

EDIT2
免责声明:还有另一种方法可以做到这一点,但我不会自己使用它,因为它很难看,而且我更喜欢警告而不是使用它。

您可以使用 Kotlin 扩展并像这样重命名您的网络 getter。

Java类:

public class A {
    private int a;

    int getA() {
        return a;
    }

    A _getB() {   // Was getB()
        return this;
    }
}
Run Code Online (Sandbox Code Playgroud)

科特林文件:

fun A.getB() : A {       // Kotlin extension
    return this._getB()
}

fun main(args: Array<String>) {
    val a = A()
    println(a.a)
    print(a.getB()) // No warning here
}
Run Code Online (Sandbox Code Playgroud)