如何在Kotlin中使用Ebean的@DbEnumValue?

背景

我试图把这个从Java的Ebean例子转换成Kotlin: http ://ebean-orm.github.io/docs/mapping/extension/dbenumvalue

以下是示例Java代码:

public enum Status { NEW("N"), ACTIVE("A"), INACTIVE("I"); String dbValue; Status(String dbValue) { this.dbValue = dbValue; } // annotate a method that returns the value // in the DB that the enum element maps to @DbEnumValue public String getValue() { return dbValue; } } 

科特林

我期待Kotlin的下列内容:

 // ERROR: This annotation is not available to target 'value parameter' enum class Status(@DbEnumValue(storage = DbEnumType.VARCHAR) value: String) { NEW("N"), ACTIVE("A"), INACTIVE("I") } 

或者可能:

 // ERROR: Expecting , or ) after "value:String" enum class Status(val value:String @DbEnumValue(storage = DbEnumType.VARCHAR) get() = value) { NEW("N"), ACTIVE("A"), INACTIVE("I") } 

下面的代码对我来说是有意义的,而且实际上也是编译的,但是构造函数的dbValue参数和带有getter注释的单独的value字段的组合在dbValue是浪费的。

 enum class Status (val dbValue:String) { NEW("N"), ACTIVE("A"), INACTIVE("I"); val value: String @DbEnumValue(storage = DbEnumType.VARCHAR) get() = dbValue } 

当我让IntelliJ将Java转换成Kotlin时,它是这样做的:

 enum class Status private constructor(dbValue: String) { NEW("N"), ACTIVE("A"), INACTIVE("I"); var value: String internal set init { @DbEnumValue(storage = DbEnumType.VARCHAR) this.value = dbValue } } 

我添加了IntelliJ生成的注释,但是花了我几个猜测来弄清楚把它放在哪里。

问题

  • 为什么private constructor
  • 为什么var value没有get()?
  • 什么是internal set
  • 为什么init
  • 为什么额外的dbValuevariables? (我想将构造函数的值传递给public注释的get方法)。
  • 这是对的吗?
  • 什么是这样做的惯用方法?

任何解释,更正或改进将不胜感激。 如果你认为这属于codeReview,我很好,你移动它。

我认为最@EnumValue解决方案是使用@EnumValue而不是@DbEnumValue:

 enum class Status { @EnumValue("N") NEW, @EnumValue("A") ACTIVE, @EnumValue("I") INACTIVE }