В моем утверждении when
у нас есть 3 случая, которые выполняют аналогичную вещь.
private fun bindValue(target: Activity) {
val declaredFields = target::class.java.declaredFields
for (field in declaredFields) {
for (annotation in field.annotations) {
when(annotation) {
is ReflectSource -> {
field.isAccessible = true
field.set(target, annotation.value)
}
is ReflectBinary -> {
field.isAccessible = true
field.set(target, annotation.value)
}
is ReflectRuntime -> {
field.isAccessible = true
field.set(target, annotation.value)
}
}
}
}
}
Поэтому я подумал о слиянии их, как показано ниже
private fun bindValue(target: Activity) {
val declaredFields = target::class.java.declaredFields
for (field in declaredFields) {
for (annotation in field.annotations) {
when(annotation) {
is ReflectSource, is ReflectBinary, is ReflectRuntime -> {
field.isAccessible = true
field.set(target, annotation.value)
}
}
}
}
}
Однако,он ошибочно заявляет, что value
из annotation
недоступен.Зачем?Не могу ли я объединить эти 3 оператора case?
Обновление Мои три класса, как показано ниже
@Retention(AnnotationRetention.SOURCE)
@Target(AnnotationTarget.FIELD)
annotation class ReflectSource(val value: Int)
@Retention(AnnotationRetention.BINARY)
@Target(AnnotationTarget.FIELD)
annotation class ReflectBinary(val value: Int)
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FIELD)
annotation class ReflectRuntime(val value: Int)