#android #android-studio #android-layout
Вопрос:
Функция привязки представлений, добавленная в Android Studio 3.6, устраняет необходимость в неуклюжем findViewById
механизме.
Однако, если я не ошибаюсь, он еще не поддерживает способ объявления параметров типа для универсальных.
Рассмотрим следующий класс представлений:
/**
* Spinner that calls toString() on choices to represent them in the UI.
*/
public class Spinner<T> extends androidx.appcompat.widget.AppCompatSpinner {
// ...
private List<T> items;
private int selectedItemIndex;
public void setItems(List<T> items) {
this.items = items;
}
public T getSelectedItem() {
return items.get(selectedItemIndex);
}
}
Теперь, если мой код содержит что-то вроде следующего:
List<Foobar> foobars = getFoobarListFromSomewhere();
views.foobarSpinner.setItems(foobars);
Затем Android Studio покажет мне непроверенное предупреждение, такое как:
Unchecked call to 'setItems(Collection<T>)' as a member of raw type 'org.example.views.Spinner'
И единственный способ обойти это , по-видимому, состоит в добавлении //noinspection unchecked
или приведении view.foobarSpinner
к другой переменной, имеющей правильно параметризованный тип, что очень громоздко.
Есть ли в настоящее время какой-либо более чистый способ решения этой проблемы?
Комментарии:
1. Как в первую очередь раздуватель макета предоставляет параметр общего типа? Довольно уверен, что (неабстрактные) классы представлений не должны быть универсальными.
2. @Pawel Я считаю, что надувателю не нужно беспокоиться об этом, поскольку параметры типа не существуют во время выполнения.