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