java – 为什么以及何时将@JvmStatic与伴侣对象一起使用?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 为什么以及何时将@JvmStatic与伴侣对象一起使用?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1526字,纯文字阅读大概需要3分钟。
内容图文
![java – 为什么以及何时将@JvmStatic与伴侣对象一起使用?](/upload/InfoBanner/zyjiaocheng/702/fcd7b4bd146b4779be51499b18a14cc5.jpg)
我试图理解使用/不使用@JvmStatic与何时使用其中任何一个之间的区别.
所以,使用Kotlin和Java,我可以这样做:
TestKotlin.kt
class TestKotlin {
companion object {
val someString = "hello world"
}
}
然后由Java调用,如下所示:
TestJava.java
public class TestJava {
String kotlinStaticString = TestKotlin.Companion.getSomeString();
}
但是,有这个选项2:
TestKotlin.kt v2
class TestKotlin {
companion object {
@JvmStatic // <-- notice the @JvmStatic annotation
val someString = "hello world"
}
}
然后,从Java调用它,如下所示:
TestJava.java v2
public class TestJava {
String kotlinStaticString = TestKotlin.getSomeString();
}
所以我的问题是:
>在行为或内存分配方面,这2个案例有何不同?
>是否优先使用哪一个?
>两者都创建一个伪静态单例对象,就像Java静态一样吗?
谢谢!
解决方法:
在the documentation中详细解释了@JvmStatic注释的行为.在阅读文档时,您应该假设它为您提供了所有重要信息,并且文档中未提及的行为差异不存在.
在这种情况下,文档说:
If you use this annotation, the compiler will generate both a static method in the enclosing class of the object and an instance method in the object itself.
换句话说,注释的效果是它告诉编译器生成另一个方法.
文档是否提到行为或内存分配有任何差异?它不是.因此,可以安全地假设没有.
是否有偏好使用哪一个?通常,API在一个地方声明并在多个地方使用.如果您从Java调用方法,那么您应该将其声明为@JvmStatic,因为在一个位置添加@JvmStatic注释将允许您在多个位置省略多个.Companion引用.
两者都创建一个伪静态单例对象,就像Java静态一样吗?这个问题没有意义,因为Java static不会创建“伪静态单例对象”.如果在Java类中声明静态方法,然后调用此方法,则不会创建任何对象.
内容总结
以上是互联网集市为您收集整理的java – 为什么以及何时将@JvmStatic与伴侣对象一起使用?全部内容,希望文章能够帮你解决java – 为什么以及何时将@JvmStatic与伴侣对象一起使用?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。