Я пытаюсь определить StringDef в котлине:
@Retention(AnnotationRetention.SOURCE)
@StringDef(NORTH, SOUTH)
annotation class FilterType {
companion object {
const val NORTH = "NORTH"
const val SOUTH = "SOUTH"
}
}
Я думаю, что что-то не так в приведенном выше коде.
// I can send anything to this method, when using my kotlin stringDef
private fun takeString(@DirectionJava.Direction filterType: String) {
Я хочу котлинский эквивалент java ниже:
public class DirectionJava {
public static final String NORTH = "NORTH";
public static final String SOUTH = "SOUTH";
@Retention(RetentionPolicy.SOURCE)
@StringDef({
NORTH,
SOUTH,
})
public @interface Direction {
}
}
Вызов java-определенного StringDef работает из kotlin
// This works as expected, the Java-written string def
// restricts what I can pass to this method
private fun takeString(@DirectionJava.Direction filterType: String) {
В чем я ошибся, как определить StringDef в Kotlin?
Согласно проблема с реактивным мозгом, плагин проверки Lint для перечисленных аннотаций в kotlin находится в стадии разработки и еще не стабилен. Проверка аннотаций поддержки Android, таких как @Nullable, @StringRes, @DrawableRes, @IntRange, ... (которые написаны на java), работает нормально, а определенные пользователем нумерованные аннотации не проверяются должным образом. Итак, кажется, что мы должны определить их в java, а затем использовать в kotlin.
К сожалению, в Kotlin нет никаких признаков улучшения этой темы. Таким образом, линт не проверяет значение переменных для аннотированных пользовательских StringDef и т. д.