静态方法
Kotlin 中,我们还可以将命名对象或伴生对象中定义的函数标注为 @JvmStatic,这样编译器既会在相应对象的类中生成静态方法,也会在对象自身中生成实例方法。
跟静态属性类似的,我们看下面的代码示例:
1. class Department {
2. ...
3. companion object {
4. var innerID = "X001"
5. @JvmField
6. var innerName = "DEP"
8. fun getObjectName() = "ONAME"
9. @JvmStatic
10. fun getObjectID() = "OID"
11. }
12. }
编译器编译之后,反编译成的对应的Java代码:
1. public final class Department {
2. ...
3. @JvmStatic
4. @NotNull
5. public static final String getObjectID() {
6. return Companion.getObjectID();
7. }
9. public static final class Companion {
10. ...
11. @NotNull
12. public final String getObjectName() {
13. return "ONAME";
14. }
16. @JvmStatic
17. @NotNull
18. public final String getObjectID() {
19. return "OID";
20. }
21. ...
22. }
23. }
在Java中调用的代码如下:
1. Department.Companion.getObjectID(); // OK
2. Department.Companion.getObjectName(); // OK, 唯一的工作方式
3. Department.getObjectID(); // ALSO OK
4. Department.getObjectName(); // ERROR
这些注解语法是编译器为了更加方便Java调用Kotlin代码提供的一些简便技巧。这样可使得Java中调用Kotlin代码更加自然优雅些。
