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 合成方法对我有很大帮助。
您可以简单地将属性声明为private,然后它们将不会生成 getter 和 setter。
class Foo {\n private val foo: String = "foo"\n}\nRun 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}\nRun Code Online (Sandbox Code Playgroud)\n