Поскольку абстрактный val
или var
- это просто функция без вспомогательного поля, его нельзя аннотировать аннотацией IdRes
, но существует обходной путь.Вы можете использовать это так:
@get:IdRes
abstract val headerId: Int
РЕДАКТИРОВАТЬ:
Почему это работает?Нам нужно более внимательно изучить аннотацию IdRes
и ее исходный код:
@Documented
@Retention(CLASS)
@Target({METHOD, PARAMETER, FIELD, LOCAL_VARIABLE})
public @interface IdRes {
}
Как мы видим, эту аннотацию можно использовать для методов, параметров, полей и локальных переменных.Когда мы используем abstract val
, это ни то, ни другое, поскольку оно абстрактно и у нас не может быть абстрактных полей в Java.Обычно эквивалент abstract val something: Int
в Java:
private int something
public int getSomething() {
return something;
}
Из примера легко увидеть, что приватное поле - это то, что называется резервным полем свойства, и вы не можете иметь такие абстрактные поля, чтобыбыла проблема.