当前位置: 首页 > 面试题库 >

Kotlin中的Java静态方法等效于什么?

屠瑞
2023-03-14
问题内容

staticKotlin中没有关键字。

static用Kotlin 表示Java方法的最佳方法是什么?


问题答案:

您将功能放置在“伴侣对象”中。

所以像这样的java代码:

class Foo {
  public static int a() { return 1; }
}

会变成

class Foo {
  companion object {
     fun a() : Int = 1
  }
}

然后,您可以从Kotlin代码内部使用它,如下所示:

Foo.a();

但是从Java代码中,您需要将其称为

Foo.Companion.a();

(这也来自Kotlin。)

如果您不想指定Companion位,则可以添加@JvmStatic注释或命名伴侣类。

从文档:

类内的对象声明可以用伴随关键字标记:

class MyClass {
   companion object Factory {
       fun create(): MyClass = MyClass()
   }
}

可以通过仅使用类名作为限定符来调用伴随对象的成员:

val instance = MyClass.create()

但是,在JVM上,如果使用@JvmStatic
批注,则可以将伴随对象的成员生成为实际的静态方法和字段。有关更多详细信息,请参见Java互操作性部分。

添加@JvmStatic注释如下所示

class Foo {
  companion object {
    @JvmStatic
    fun a() : Int = 1;
  }
}

然后它将作为一个真正的Java静态函数存在,可以从Java和Kotlin中以方式访问Foo.a()

如果只是不喜欢该Companion名称,则还可以为伴随对象提供一个明确的名称,如下所示:

class Foo {
  companion object Blah {
    fun a() : Int = 1;
  }
}

它可以让您以相同的方式从Kotlin调用它,但可以从java like Foo.Blah.a()(在Kotlin中也可以)调用它。



 类似资料:
  • 问题内容: 我将某些本机方法重写为常规Java方法。 本机方法有效地静态吗?或者是否曾经有一个隐式的“ this”参数? 谢谢! 问题答案: 就像常规Java方法一样,本机方法可以是非方法。 非本机方法接收引用,而非本机方法则接收对containg类的引用。 根据JNI规范: 本机方法参数 JNI接口指针是本机方法的第一个参数。JNI接口指针的类型为JNIEnv。第二个参数根据本机方法是静态还是静

  • 问题内容: 我喜欢在这里使用这种方法: 唯一的缺点(例如,与Google Guava相比)是无法静态导入该方法。也就是说,这是没有用的: …因为我的Eclipse编译器在编写时无法正确链接该方法 错误是: Object类型中的equals(Object)方法不适用于参数(…,…) 这是为什么?如果在任何超级类型中都存在具有相同名称(但签名不相同)的方法,我的静态导入方法是否不适用?这是JLS中正式

  • 问题内容: Go中是否有类似java finalize的方法?如果我有一个类似的类型结构 如何确保在垃圾回收对象时关闭文件? 问题答案: iirc。但是它被认为是一件坏事,并且不能保证在程序退出之前就可以运行 编辑:如下所述,当前程序包已在文件上调用。但是,不应该依赖。作为一个示例,我有一个类似文件服务器的应用程序,但我忘记了关闭打开的文件。在GC选取并打开其终结器之前,该过程通常可以获取约300

  • 问题内容: 我有一个带有一些静态成员的类,并且我想运行一些代码来初始化它们(假设此代码无法转换成简单的表达式)。在Java中,我只会 除非我弄错了,否则C ++不允许使用此类静态代码块,对吗?我应该怎么做呢? 我想要以下两个选项的解决方案: 初始化在进程加载时发生(或在加载带有此类的DLL时)。 初始化发生在第一次实例化该类时。 对于第二种选择,我在想: 但这是不可能的,因为C ++(目前?)不允

  • 本文向大家介绍Kotlin实现静态方法,包括了Kotlin实现静态方法的使用技巧和注意事项,需要的朋友参考一下 工具类 全都是静态方法的情况 : class 类名 改为 object 类名 即可 普通静态方法 一部分是静态方法的情况 : 将方法用 companion object { } 包裹即可 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 问题内容: 我在Java中使用以下语句: 请提出等效的C#。 问题答案: 我不知道框架中执行此操作的任何内容,但是实现起来很容易: 或者,如果您要指定计数而不是开始/结束: