如何在Kotiln中为枚举创建"静态"方法?

ruX*_*ruX 47 enums static kotlin

Kotlin已经为枚举类提供了许多"静态"方法,比如valuesvalueOf

例如,我有枚举

public enum class CircleType {
    FIRST
    SECOND
    THIRD
}
Run Code Online (Sandbox Code Playgroud)

我该如何添加静态方法random(): CircleType?扩展功能似乎不适用于这种情况.

yol*_*ole 105

就像任何其他类一样,您可以在枚举类中定义类对象:

enum class CircleType {
  FIRST,
  SECOND,
  THIRD;
  companion object {
     fun random(): CircleType = FIRST // http://dilbert.com/strip/2001-10-25
  }
}
Run Code Online (Sandbox Code Playgroud)

然后你就可以把这个函数称为CircleType.random().

编辑:注意枚举常量条目和伴随对象之前的结束分号之间的逗号.两者现在都是强制性的

  • 如果您希望它作为静态方法从Java可见,您还需要使用[platformStatic]注释它. (6认同)
  • 现在你需要使用@JvmStatic https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html#static-methods (4认同)
  • 如果你真的想和Java一起使用,请使用`@ JvmStatic`,否则只会浪费资源 (3认同)
  • 仅当您从Java代码而不是Kotlin访问方法时,才需要“伴侣”参考。 (2认同)
  • @SiamakSiaSoft 是的,我同意,这就是我写的原因:使用 `@JvmStatic` **如果你真的想与 Java 一起使用** (2认同)