Jackson の @JsonSubTypes アノテーションを使用してポリモーフィズムを管理する Java コードを変換しようとしています。
動作するJavaコードは次のとおりです。
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = Comment.class, name = "CommentNote"),
@JsonSubTypes.Type(value = Photo.class, name = "PhotoNote"),
@JsonSubTypes.Type(value = Document.class, name = "DocumentNote")
})
public abstract class Note implements Identifiable {
[...]
同等だと思うKotlinコードは次のとおりです。
JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
JsonSubTypes(
JsonSubTypes.Type(value = javaClass<Comment>(), name = "CommentNote"),
JsonSubTypes.Type(value = javaClass<Photo>(), name = "PhotoNote"),
JsonSubTypes.Type(value = javaClass<Document>(), name = "DocumentNote")
)
abstract class Note : Identifiable {
[...]
しかし、3 つの「JsonSubTypes.Type」行のそれぞれで次のエラーが発生します。
Kotlin: An annotation parameter must be a compile-time constant
Kotlin: Annotation class cannot be instantiated
何か案が?