对于此代码
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合成方法将对我有很大帮助。
答案 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();
}