Как использовать аннотацию Jackson JsonSubTypes в Kotlin

Я пытаюсь преобразовать некоторый Java-код, который использует аннотацию @JsonSubTypes от Jackson для управления полиморфизмом.

Вот рабочий код 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 { [...] 

Вот код Котлина, который, я думаю, был бы эквивалентен:

 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 { [...] 

Но я получаю следующие ошибки на каждой из трех строк «JsonSubTypes.Type»:

 Kotlin: An annotation parameter must be a compile-time constant Kotlin: Annotation class cannot be instantiated 

Есть идеи?

Оказывается, это ошибка в компиляторе, спасибо за сообщение об этом. Чтобы обойти эту проблему, вы можете импортировать JsonSubTypes.Type и использовать ее без квалификации:

 import org.codehaus.jackson.annotate.JsonSubTypes.Type JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") JsonSubTypes( Type(value = javaClass<Comment>(), name = "CommentNote"), Type(value = javaClass<Photo>(), name = "PhotoNote"), Type(value = javaClass<Document>(), name = "DocumentNote") ) abstract class Note : Identifiable { [...] 

Я считаю, что это было разрешено, и в настоящее время вы можете написать это так:

 import com.fasterxml.jackson.annotation.JsonSubTypes import com.fasterxml.jackson.annotation.JsonTypeInfo @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")) interface Note 

Обратите внимание на нотацию класса в JsonSubTypes.Type