Когда я использую отражение Kotlin, чтобы получить обнуляемость Kotlin свойств, таких как val nullableString: String?
, я получаю правильную информацию в isMarkedNullable
свойстве KType
. Он также работает «внутри» типов, таких как val nullableList: List<String?>?
, где не только обнуляем весь список, но и отдельные элементы могут быть null
.
Я хотел бы использовать тот же механизм и для Java типы. Это частично работает, например, когда у меня есть свойство, подобное public @javax.annotation.Nullable String text;
. Но @javax.annotation.Nullable
нельзя использовать таким образом public List<@Nullable String> list;
, потому что у него нет цели TYPE_USE
. Поэтому я хотел бы использовать @org.checkerframework.checker.nullness.qual.Nullable
, но эта аннотация игнорируется отражением Котлина.
Вот некоторый тест:
public class KotlinReflectionTest {
public static void main(String[] args) {
for (Field field : TestClass.class.getFields()) {
final KProperty<?> kProperty = ReflectJvmMapping.getKotlinProperty(field);
System.out.println(kProperty.getName() + " nullable: " + kProperty.getReturnType().isMarkedNullable());
}
}
public static class TestClass {
public String text; // false
public @javax.annotation.Nullable String textJavax; // true
public @org.jetbrains.annotations.Nullable String textJetbrains; // false
public @org.checkerframework.checker.nullness.qual.Nullable String textChecker; // false
}
}
, который выдает следующий вывод:
text nullable: false
textJavax nullable: true
textJetbrains nullable: false
textChecker nullable: false
Можно ли сказать Kotlin Reflection, какие аннотации использовать? Планируют ли они поддерживать Checker Framework? Буду признателен за любой комментарий. Спасибо