Как использовать StringDef или IntDef в Kotlin? - PullRequest
0 голосов
/ 17 октября 2018

Ссылаясь на https://developer.android.com/reference/android/support/annotation/StringDef https://developer.android.com/reference/android/support/annotation/IntDef

Я мог бы легко создать мою проверку компиляции, которая ограничивает мой параметр String конкретным типом String (в Java)

например

import android.support.annotation.StringDef;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.SOURCE;

@Retention(SOURCE)
@StringDef({
    "allow_one",
    "okay_two"
})
public @interface AllowedString { }

Так что, если у меня есть

class TestAnnotation(@AllowedString private val name: String) {
    fun printName(@AllowedString name: String) {}
}

И когда я кодирую

val testAnnotation = TestAnnotation("not_allowed")

Android Studio сообщит об ошибке на not_allowed, поскольку ее нет в списке.

Если я преобразую в Kotlin интерфейс аннотации AllowedString, как показано ниже, он больше не будет работать.Почему?

import android.support.annotation.StringDef
import java.lang.annotation.Retention
import java.lang.annotation.RetentionPolicy.SOURCE

@Retention(SOURCE)
@StringDef("allow_one", "okay_two")
annotation class AllowedString

Почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...