我试图了解使用/不使用@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();
}
所以我的问题是:
谢谢!
@JvmStatic
注释的行为在文档中进行了详细说明。阅读文档时,应假定它为您提供了所有重要信息,并且不存在文档中未提及的行为差异。
在这种情况下,文档说:
如果使用此批注,则编译器将在对象的封闭类中生成静态方法,并在对象本身中生成实例方法。
换句话说,注释的作用是告诉编译器 生成其他方法 。
文档中是否提到行为或内存分配有任何差异?它不是。因此,可以安全地假设没有。
是否有偏好使用哪一个?通常,API在一个地方声明并在多个地方使用。如果从Java调用方法,则应将其声明为@JvmStatic
,因为@JvmStatic
在一个地方添加注释将使您可以.Companion
在多个地方省略多个引用。
两者都像Java
static一样创建伪静态单例对象吗?这个问题没有道理,因为Java静态不会创建“伪静态单例对象”。如果在Java类中声明静态方法,然后调用此方法,则不会创建任何对象。
问题内容: 抱歉,如果我有点模棱两可,但是我试图了解使用Node.js而不是其他服务器端语言的真正优势。 我是JavaScript爱好者,所以我可能会玩Node.js,但我想知道是否应该在项目中使用它。 问题答案: 在V8上发生了异步非阻塞I / O 构建。 因此,我们拥有了Google JavaScript解释器V8的所有性能提升。由于JavaScript性能竞赛尚未结束,您可以期望Google
问题内容: 令我惊讶的是,StackOverflow上没有人问过这个问题。 通过JSON对象文档和快速的Google搜索无法获得令人满意的结果。 有什么好处?它是如何工作的? 编辑:为了清楚起见,请看一下这个展平/未展平的示例。 谢谢。 问题答案: 在许多情况下,您会获得由某些库自动构建的JSON文本。在整个编程语言中,有许多库构建JSON文本(此处是一个示例 每当库添加一些其他对象或数组包装时,
问题内容: 在我的应用程序中,我需要通过ajax发布将javascript Array对象发送到php脚本。像这样: 数组的索引是字符串,而不是int,因此,诸如saveData.join(’&’)之类的东西不起作用。 有想法吗? 提前致谢 问题答案: 如果不是数组,则不要使其成为数组,而应将其作为对象: 以与Arrays相同的方式进行操作只是利用Javascript对Arrays的处理方式,而不
我试图了解GraphQL最适合在微服务架构中使用的地方。 关于只有一个GraphQL模式作为API网关,将请求代理给目标微服务并强制它们的响应,存在一些争论。微服务仍然会使用REST/Trift协议进行通信。 另一种方法是拥有多个GraphQL模式,每个微服务一个。有一个较小的API网关服务器,它将请求路由到目标微服务,并带有请求的所有信息+GraphQL查询。 第一种方法 将1个GraphQL模
问题内容: 为什么在生成输出时不能与DomDocument对象一起使用? 问题答案: 更新: 从PHP 5.4.1开始,您最终可以使用DOM对象。参见https://gist.github.com/2499678 这是一个错误: http://bugs.php.net/bug.php?id=48527
Kotlin代码是这样的: 可以简单地更改为 我知道同伴对象可以用来作为真正的java静态函数使用,但是使用同伴对象还有其他的优点吗?