Проверка Android-ожиданий "ожидаемого ресурса типа"?
Android Studio Beta (0.8) имеет отличную новую функцию, где он проверяет, что некоторые параметры int
не являются произвольными целыми числами, а имеют некоторые свойства.
Например, вызывая что-то вроде:
setContentView(R.id.textView1);
будет правильно сообщать, что R.id.textView1
не является идентификатором макета (сообщение является "ожидаемым ресурсом макета типа" ). Есть и другие случаи, когда это переполнено.
Понятно, что эта защита теряется, как только вы добавляете свои собственные методы в микс, например.
private void mySetContentView(int resourceId) {
setContentView(resourceId);
}
Затем я могу вызвать mySetContentView()
с любым произвольным целым числом, и он не будет жаловаться.
Итак, у меня есть два (связанных) вопроса:
- Как это достигается - специальные проверки, "запеченные" в линт?
- Есть ли способ аннотировать метод
mySetContentView()
, чтобы он также сообщал об ошибке типа ресурса при вызове с недопустимым значением?
Ответы
Ответ 1
(Спасибо @CommonsWare за головы).
Существуют аннотации Java для поддержки этих проверок в вашем собственном коде. Все они могут быть найдены в пакете android.support.annotations
:
-
IdRes
-
DrawableRes
-
LayoutRes
-
StringRes
- & с
В этом случае, например, я мог бы использовать:
private void mySetContentView(@LayoutRes int resourceId) {
setContentView(resourceId);
}
и Android Studio проверит, что предоставленный идентификатор ресурса действительно предназначен для макета.
Кроме того, эти аннотации экспортируются, поэтому они могут быть особенно полезны при разработке библиотеки.
Источники:
Ответ 2
Все это Аннотации:
@AnimatorRes
@AnimRes
@AnyRes
@ArrayRes
@AttrRes
@BoolRes
@ColorRes
@DimenRes
@DrawableRes
@FractionRes
@IdRes
@IntDef
@IntegerRes
@InterpolatorRes
@LayoutRes
@MenuRes
@NonNull
@Nullable
@PluralsRes
@RawRes
@StringDef
@StringRes
@StyleableRes
@StyleRes
@XmlRes
Ответ 3
Попробуйте этот ответ: его работа... Поместите этот код в свой build.gradle
android {
lintOptions {
disable "ResourceType"
}
}
Ответ 4
Все аннотации, которые можно использовать с android.support.annotation
, вы можете найти здесь.
И технический документ о поддержке аннотаций.