Определить StringDef в котлине

Я пытаюсь определить 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?

8
0
4 836
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Согласно проблема с реактивным мозгом, плагин проверки Lint для перечисленных аннотаций в kotlin находится в стадии разработки и еще не стабилен. Проверка аннотаций поддержки Android, таких как @Nullable, @StringRes, @DrawableRes, @IntRange, ... (которые написаны на java), работает нормально, а определенные пользователем нумерованные аннотации не проверяются должным образом. Итак, кажется, что мы должны определить их в java, а затем использовать в kotlin.

К сожалению, в Kotlin нет никаких признаков улучшения этой темы. Таким образом, линт не проверяет значение переменных для аннотированных пользовательских StringDef и т. д.

aminography 02.03.2020 07:41

Другие вопросы по теме