value class と名前が変更された // JVM向けの場合JvmInlineアノテーションを付ける必要が有る @JvmInline value class FooId(val value: Int) Unsigned Integers も value class として定義されている @JvmInline public value class UInt @PublishedApi internal constructor(@PublishedApi internal val data: Int) : Comparable<UInt> { /* 略 */ 4
デコンパイル結果(抜粋・整形済み) */ public final class Dto { // getterの名前が書き変わっている! public final int getFooId-gdWu5YM() { return this.fooId; } } -> 無理やり整形するか Kotlin 上のプロパティ情報を探しに行くことになる! 11
インスタンスメソッド向けのリフレクション処理が機能しない @JvmInline value class FooId(val value: Int) { @JsonValue fun getJsonValue() = "FooId$value" } /* デコンパイル結果(抜粋・整形済み) */ public final class FooId { // JsonValueは付与されているが、実際にはstaticメソッドになっているため機能しない! @JsonValue @NotNull public static final String getJsonValue-impl(int $this) { return "FooId" + $this; } } 15
class を処理する時には多くの辛さが有る 発生する問題への対処は、 Java/Kotlin 両方のコンパイル結果とリフレクション を理解しながら地道にやっていくしかない 自分も jackson-module-kotlin の value class 対応頑張ります ので、応援してください 間違ってもRedditなんかでボロクソ言ったりしちゃいけないよ! 17