Kotlin и размышления о свойствах с использованием Kotlin-рефлекса - PullRequest
0 голосов
/ 03 октября 2018

Я использую kotlin-reflect для отражения в классе данных Kotlin

Определение такое:

@JsonIgnoreProperties(ignoreUnknown = true)
data class TopicConfiguration(
    @JsonProperty("max.message.bytes") var maxMessageBytes: Long? = null,
    @JsonProperty("compression.type") var compressionType: String? = null,
    @JsonProperty("retention.ms") var retentionMs: Long? = null
)

Я хочу получить @JsonProperty, используя отражение, но когда я пытаюсь

obj
  .javaClass
  .kotlin
  .declaredMemberProperties
  .first()
  .findAnnotation<JsonProperty>()

Тогда я получаю null независимо от того, что я пытаюсь.

Как получить доступ к аннотациям свойств с помощью отражения в классе данных Kotlin (а ​​именно @JsonProperty, который определен в привязке данных Джексона)

1 Ответ

0 голосов
/ 03 октября 2018

Я только что нашел ответ:

Используя java-декомпилятор, очевидно, что аннотации не для полей или геттеров, а для параметров конструктора

public TopicConfiguration(@Nullable @JsonProperty("max.message.bytes") Long maxMessageBytes, @Nullable @JsonProperty("compression.type") String compressionType, @Nullable @JsonProperty("retention.ms") Long retentionMs)
  {
    this.maxMessageBytes = maxMessageBytes;this.compressionType = compressionType;this.retentionMs = retentionMs;
  }

Мне удалось получить аннотации, когдаЯ использовал рефлекс Котлина для параметров конструктора

obj
    .javaClass
    .kotlin
    .constructors
    .first()
    .parameters
    .first()
    .findAnnotation<JsonProperty>()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...