当前位置:   article > 正文

kotlin companion object

kotlin companion object

总结:

kotlin不支持static关键字,所有java中的static的field, method,都可以转换成companion object里边的field和method。

另外,在java中,在class里边生成的static field和method一般有两种可见性,一种是public的, 一种是private的。public表示全局访问,这没什么问题。如果是private的,那表示只有该class对应的object instance才可以访问,比如那些只有该类才可以访问的常量。对应的kotlin object就是,java中的private static final对应的是kotlin companion object里边的private val变量,甚至是private const修饰的。

比如下边的代码:

  1. class OuterClass {
  2. val outerName = "outer tom"
  3. companion object {
  4. var age = 44
  5. const val name = "inner tom"
  6. private const val sex = "man"
  7. fun printName() {
  8. println("inner name is $name, age is $age")
  9. }
  10. }
  11. }

对应的java代码如下:

  1. import kotlin.Metadata;
  2. import kotlin.jvm.internal.DefaultConstructorMarker;
  3. import org.jetbrains.annotations.NotNull;
  4. public final class OuterClass {
  5. @NotNull
  6. private final String outerName = "outer tom";
  7. private static int age = 44;
  8. @NotNull
  9. public static final String name = "inner tom";
  10. private static final String sex = "man";
  11. @NotNull
  12. public static final OuterClass.Companion Companion = new OuterClass.Companion((DefaultConstructorMarker)null);
  13. @NotNull
  14. public final String getOuterName() {
  15. return this.outerName;
  16. }
  17. public static final class Companion {
  18. public final int getAge() {
  19. return OuterClass.age;
  20. }
  21. public final void setAge(int var1) {
  22. OuterClass.age = var1;
  23. }
  24. public final void printName() {
  25. String var1 = "inner name is inner tom, age is " + ((OuterClass.Companion)this).getAge();
  26. System.out.println(var1);
  27. }
  28. private Companion() {
  29. }
  30. // $FF: synthetic method
  31. public Companion(DefaultConstructorMarker $constructor_marker) {
  32. this();
  33. }
  34. }
  35. }

可以看到,companion object里边的三个feild - name, age, sex都被挪到外部了,并且都是 static final的,只不过age由于是没有使用const修饰,还有getter,setter方法,这也是为什么idea会推荐加上const关键字。sex有Private修饰,表示只有本包下可以访问。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/277432
推荐阅读
相关标签
  

闽ICP备14008679号