Kotlin中没有static关键字.

用Kotlin表示staticJava方法的最佳方式是什么?

推荐答案

将函数放在"同伴对象"中.

所以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注释或命名同伴类.

docs人中:

Companion Objects

类中的对象声明可以用companion标记 关键词:

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

只需使用类就可以调用伴生对象的成员

val instance = MyClass.create()

...

但是,在JVM上,可以生成伴随对象的成员

添加@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相关问答推荐

在FML中删除关键帧动画

RDX触发ChoiceBox转换器(并按字符串值排序)

为什么Java的代码工作(if condition内部的实例)

上下文初始化期间遇到异常-使用Java配置配置HibernateTemplate Bean时

Kubernetes的Java客户端检索状态.处于终止状态的Pod的阶段';正在运行';

为什么我的ArrayList索引的索引总是返回-1?

我不能再在Android Studio Hedgehog上用Java语言创建新项目了吗?

为什么使用JDK21获取锁定锁比使用JDK11慢

将响应转换为带值的键

try 将JSON字符串响应从API转换为映射字符串、对象>;时出错

Java.lang.invke.LambdaConversionException:实例方法InvokeVirtual的参数数量不正确

Dijkstra搜索算法的实现

JFree Chart从图表中删除边框

具有多个模式的DateTimeForMatter的LocalDate.parse失败

将java.util.Date(01.01.0001)转换为java.time.LocalDate将返回29.12.0000

如何使用WebEnvironment.RANDOM_PORT获得第二个随机端口?

在Java中将.GRF转换为图像文件

JavaFX:为什么我的ComboBox添加了一个不必要的单元格的一部分?

为什么没有加载java.se模块?

为什么child-pom会创建一个新版本