Как да използвам StringDef или IntDef в Kotlin?

Позоваване на https://developer.android.com/reference/android/support/annotation/StringDef https://developer.android.com/reference/android/support/annotation/IntDef

Бих могъл лесно да създам моята валидация на компилация, която ограничава моя параметър String до конкретен тип String (в Java)

e.g.

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

Защо?


person Elye    schedule 17.10.2018    source източник
comment
Изглежда, че е известен проблем: discuss.kotlinlang.org/t/, discuss.kotlinlang.org/t/, stackoverflow.com/ questions/37833395/kotlin-annotation-intdef   -  person TheWanderer    schedule 17.10.2018