Всем привет! Подскажите, пожалуйста, по обобщенным методам: 1) Нашла такой пример кода:
class Utils {
    // Обобщённый метод.
    static <T> void setIfNull(Lair<T> lair, T t) {
        if (lair.getInhabitant() == null) {
            lair.setInhabitant(t);
        }
    }
}
Правильно ли я понимаю, что первый <T> в static <T> void setIfNull означает, что метод setIfNull() мы можем вызвать только у класса, чьим "вложенным" типом является <T>? То есть, с таким же успехом мы можем вызвать его и у List<T> ? 2) Во многих статьях пишется, что <T> — это параметр типа / обобщенный параметр. Однако параметры мы указываем в скобках (имею в виду параметры, передаваемые в метод значения). Немного смущает формулировка "параметр". Верно ли, что <T> — это тип данных, который может вернуть наш метод и/или получить в качестве параметров? 3) Нашла такой пример кода:
public static <T, V> boolean isIn(T x, V[] array) {
    for (V element : array) {
        if (x.equals(element)) {
            return true;
        }
    }
    return false;
Если я правильно понимаю, то здесь работает правило: "Прежде чем использовать обобщенный параметр его необходимо указать перед возвращаемым типом". Мы таким образом просто говорим компилятору, что эти типы будут использоваться в методе? Указания этих типов в передаваемых параметрах недостаточно, получается? 4) Возможно, у кого-то есть под боком статья/видео из разряда "Подробно про обобщенные методы"?