从kotlin代码中移除getter和setter

对于这个代码

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构建系统中的一些bug,我不能使用proguard或multidex。 所以删除kotlin综合方法将会对我有所帮助。

你可以简单地声明你的属性是private ,那么它们就不会有获取器和设置器。

 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(); }