首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin 类声明与伴生对象(companion

companion object 的出现是为了解决 Java static 方法的反面向对象(Anti-OOP)的问题。...而 Scala 为了完成一切皆对象的使命,以及提高与 Java 的兼容性,提出了伴生对象这个概念来代替 static 方法。随后出身的 Kotlin 也借鉴了这个概念。...2. companion 的实现 在 Kotlin 中,调用 Java 的 static 方法和调用 Kotlin 的 companion object 方法是一样的: AJavaClass.staticFun...() AKotlinClass.companionFun() 而在 Java 中,调用 static 方法和 Kotlin 的伴生 companion object 方法,有一点不同: AJavaClass.staticFun...(); AKotlinClass.Companion.companionFun(); 从 Java 的调用我们可以发现,companion object 的 JVM 字节码体现,是一个声明了一个叫 Companion

2.1K10

【学习笔记】区别Kotlin中的object和companion object关键字

一、前言 我们经常能够在 Java 相关技术博客中看到类似这样的文章: Java 中 X 种单例模式的写法。...就是单例模式的化身 object 可以实现 Java 中的匿名类 companion object 就是 Java 中的 static 变量 companion object 只能定义在对应的类中 但是...写了那么多 object ,我们再看看 companion object ,可谓是 object 的孪生兄弟,它可以说是为 Java 里的 static 而生的 object 。...它就像 Java 里的 static 变量,所以我们定义 companion object 变量的时候也一般会使用大写的命名方式。...我写这篇文章的时候我并没有下功夫继续深究,有机会还会再去看看转化 Java 部分源码,那样会更加加深对 object 和 companion object 甚至整个 Kotlin 语言的认识吧!

2.9K30
您找到你想要的搜索结果了吗?
是的
没有找到

【Kotlin】Kotlin 与 Java 互操作 ② ( @JvmField 注解字段给 Java | @JvmOverloads 注解修饰函数 | @JvmStatic 注解声明静态成员 )

伴生对象中声明 ; 在 Java 中 调用 Kotlin 的 Companion 伴生对象 中的成员时 , 需要通过如下形式进行调用 : Kotlin类.Companion.成员属性 Kotlin类....Companion.成员函数 如果想要 在不使用 Companion 的前提下 直接调用 Kotlin 中的 Companion 伴生对象 成员 , 可以 在 companion object 中 ,..., 在 Java 语言中访问 Kotlin 伴生对象成员 , 需要先获取 Hello.Companion 类的伴生对象 , 然后再访问 伴生对象 中的成员 ; Kotlin 代码 : class Hello...伴生对象中 , 如果要访问 这两个成员 , 必须通过 Hello.Companion 进行访问 ; 2、Java 以静态方式访问 Kotlin 伴生对象成员 在下面的代码中 , 使用 @JvmStatic...注解修饰 Kotlin 中伴生对象中的成员 , 则可以在 Java 中 以静态方式访问这些成员 ; Kotlin 代码 : class Hello { companion object {

91830

protobuf 2 kotlin 插件

proto文件就是一个数据协议的描述文件,基于其中的类型信息会被转化成对应的语言(比如java go OC等等)。 proto的好处就是协议字段非常稳定,而且可被追溯。...所以官方proto提供的java类就没办法直接被kmp所引用到。 因为上述原因,所以我们现在急需的是一个proto插件,可以帮助我们把一个proto文件直接转化成kotlin的。...pbandk pbandk 仓库地址 这个库通过protobuf-java编写了一个proto插件。...verbatim from [protobufsrc]/examples/addressbook.proto except // some surrounding comments are removed and java...但是由于在类描述文件中使用了java8的语法糖,所以这个库的类数量会有点膨胀。导致了其输出的jvm library的体积会有点大。 我全要?

34720

当Kotlin邂逅设计模式之单例模式(一)

2、Kotlin中设计模式的实现和Java的实现在某些方面还是有很大的差别的,利用Kotlin语言自身的特性实现设计模式比硬生生套用Java中的设计模式实现要更优雅和更高效。...(),如果不加注解,在Java中必须这样调用: KLazilyDCLSingleton.Companion.getInstance()....如果硬生生把Companion对象暴露给Java开发者他们可能会感到一脸懵逼。...可能大家对lazy和Companion Object功能强大感到一脸懵,让我们一起瞅瞅反编译后的Java代码你就会恍然大悟了: public final class KLazilyDCLSingleton...();//这里可以看到加了@JvmStatic注解后,getInstance内部把我们省略Companion.getInstance()这一步,这样一来Java调用者就直接KLazilyDCLSingleton.getInstance

92030

Kotlin使用静态变量与静态方法详解

前言 在日常开发过程中,静态变量和 静态方法 是我们常见的用法,Java中相信大家并不陌生了,那么在 Kotlin 中该如何使用呢?...其实很简单,只需要一个将变量和方法包含在 companion object 域中即可,比如这样: class Constant { companion object { // 接口根地址 const...和kotlin混合开发,在Java代码中就无法通过 Constant.静态变量 的方式来使用静态变量或者方法来,而是通过如下方式: //初始化各平台的APIKey PlatformConfig.setWeixin...(Constant.Companion.WECHAT_APP_ID, Constant.WECHAT_APP_SECRET) PlatformConfig.setSinaWeibo(Constant.Companion.WEIBO_APP_KEY...我们可以借助于注解 @JvmField 和 @JvmStatic 来分别标注静态变量和静态方法,之后我就能在Java代码中像以前方式那样直接使用静态的成员啦!

2.7K20
领券