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修饰的。

比如下边的代码:

class OuterClass {
    val outerName = "outer tom"

    companion object {
        var age = 44
        const val name = "inner tom"
        private const val sex = "man"
        fun printName() {
            println("inner name is $name, age is $age")
        }
    }
}

对应的java代码如下:

import kotlin.Metadata;
import kotlin.jvm.internal.DefaultConstructorMarker;
import org.jetbrains.annotations.NotNull;


public final class OuterClass {
   @NotNull
   private final String outerName = "outer tom";
   private static int age = 44;
   @NotNull
   public static final String name = "inner tom";
   private static final String sex = "man";
   @NotNull
   public static final OuterClass.Companion Companion = new OuterClass.Companion((DefaultConstructorMarker)null);

   @NotNull
   public final String getOuterName() {
      return this.outerName;
   }

   public static final class Companion {
      public final int getAge() {
         return OuterClass.age;
      }

      public final void setAge(int var1) {
         OuterClass.age = var1;
      }

      public final void printName() {
         String var1 = "inner name is inner tom, age is " + ((OuterClass.Companion)this).getAge();
         System.out.println(var1);
      }

      private Companion() {
      }

      // $FF: synthetic method
      public Companion(DefaultConstructorMarker $constructor_marker) {
         this();
      }
   }
}

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值