如何在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
? - 为什么额外的
dbValue
variables? (我想将构造函数的值传递给public注释的get方法)。 - 这是对的吗?
- 什么是这样做的惯用方法?
任何解释,更正或改进将不胜感激。 如果你认为这属于codeReview,我很好,你移动它。
我认为最@EnumValue
解决方案是使用@EnumValue
而不是@DbEnumValue:
enum class Status { @EnumValue("N") NEW, @EnumValue("A") ACTIVE, @EnumValue("I") INACTIVE }