0
背景
我想這個Ebean例如從Java轉換成科特林: http://ebean-orm.github.io/docs/mapping/extension/dbenumvalue如何在Kotlin中使用@DbEnumValue和Ebean?
這裏的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
場組合感到莫名其妙的浪費。
enum class Status (val dbValue:String) {
NEW("N"),
ACTIVE("A"),
INACTIVE("I");
val value: String
@DbEnumValue(storage = DbEnumType.VARCHAR)
get() = dbValue
}
當我讓的IntelliJ轉換Java來科特林,它這樣做:
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
變量? (我認爲從構造到公共註釋get方法傳遞值)。 - 是,即使對嗎?
- 什麼是慣用的方式做到這一點?
任何解釋,修正,改進等,將不勝感激。如果你認爲這屬於對代碼審查,我和你一起移動就OK了。