静态方法

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代码更加自然优雅些。