Используя привязку представления, можете ли вы определить параметры типа для подкласса универсального представления?

#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 Я считаю, что надувателю не нужно беспокоиться об этом, поскольку параметры типа не существуют во время выполнения.