Ссылаясь на 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
Почему?