从kotlin代码中删除getter和setter

时间:2017-11-22 23:46:11

标签: android kotlin android-testing

对于此代码

class Foo {
    var name: String? = null
}

kotlin编译器生成:

private String name;
public final String getName() { ... }
public final void setName(String name) { ... }

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

class Foo {
    @JvmField
    var name: String? = null
}

只生成一个没有其他方法的字段。

public String name;

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

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

1 个答案:

答案 0 :(得分:2)

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

class Foo {
  private val foo: String = "foo"
}

这将生成以下类:

→ javap -classpath build/classes/kotlin/test -p test.Foo
Compiled from "Foo.kt"
public final class test.Foo {
  private final java.lang.String foo;
  public test.Foo();
}