从 kotlin 代码中删除 getter 和 setter

nne*_*rov 5 android kotlin android-testing

对于此代码

class Foo {
    var name: String? = null
}
Run Code Online (Sandbox Code Playgroud)

kotlin 编译器生成:

private String name;
public final String getName() { ... }
public final void setName(String name) { ... }
Run Code Online (Sandbox Code Playgroud)

即使属性name没有自定义的 getter 或 setter。可以使用@JvmField注释删除多余的 get 和 set 方法。所以这段代码

class Foo {
    @JvmField
    var name: String? = null
}
Run Code Online (Sandbox Code Playgroud)

仅生成一个字段,无需其他方法。

public String name;
Run Code Online (Sandbox Code Playgroud)

但是有没有办法让 kotlin 编译器为整个项目中的所有属性生成 getter 和 setter?不管它有没有注解。也许一些实验性的编译器标志?

我想要它,因为我有在 kotlin 上编写的 android 仪器测试。测试 apk 超过 65k 方法计数限制。大约 2k 个方法是生成 getter/setter 的。由于 android 构建系统中的一些错误,我无法使用 proguard 或 multidex。所以去除 kotlin 合成方法对我有很大帮助。

Bom*_*mbe 3

您可以简单地将属性声明为private,然后它们将不会生成 getter 和 setter。

\n\n
class Foo {\n  private val foo: String = "foo"\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这将生成以下类:

\n\n
\xe2\x86\x92 javap -classpath build/classes/kotlin/test -p test.Foo\nCompiled from "Foo.kt"\npublic final class test.Foo {\n  private final java.lang.String foo;\n  public test.Foo();\n}\n
Run Code Online (Sandbox Code Playgroud)\n