enum class SortOrder {
@SerializedName("asc") Ascending,
@SerializedName("desc") Descending,
}
GSON の SerializedName でアノテーションした列挙値があったとして、この値をコードから参照したくなった。
JSON としてシリアライズ・デシリアライズする値の範囲が限られていたため、コード上 enum
で表現した。そして GSON での toJson
や fromJson
意外の場所で、この名前を参照したくなった。
enum 自身に値を持たせてもよいけれど、 SerializedName と二重に同じ名前を管理したくない。
ということで以下のようなコードを書いた。(Enum
値限定)
inline fun <riefied T> serializedNameOf(value: T) =
T::class.java.getField(value.toString()).getAnnotation(SerializedName::class.java).value
serializeNameOf(SortOrder.Ascending) // => "asc"