Подскажите, какой тип возвращает функция
Не могу разобраться, какой тип возвращает следующая функция
public <D extends DataSource> DataSourceBuilder<D> type(Class<D> type) {
this.type = type;
return this;
}
Уточню свой вопрос. Пока я начинающий, я привык к такому виду функций
Модификатор_доступа Тип_возвращаемого_значения Название_функции(Параметры)
Например
public List<?> getListOfSomething()
Вернет List объектов, классы которых наследуются от Object
А в примере выше как будто возвращается двойной тип - примерно вот так я вижу
public Тип_Наследник_DataSource Тип_DataSourceBuilder имя_функции (Параметр)
Как это понять? Двойной тип же не может быть, видимо я неправильно читаю функцию?
Ответы (1 шт):
Вкратце:
DataSourceBuilder<D>перед именем метода - это и есть тип возвращаемого значения метода.<D extends DataSource>перед типом возвращаемого значения показывает, что тут generic (обобщенный) метод, в определении которого далее будет использоваться типDрасширяющий типDataSource.
В дальнейшем при использовании метода, когда будет передан конкретный параметр, D будет замещен конкретным типом. Т.е., например, если метод будет вызван как type(SomeDataSource.class) (где SomeDataSource отнаследован от DataSource), то у возвращаемого значения будет тип DataSourceBuilder<SomeDataSource>.
Более простой (игрушечный) пример без ограничения типа:
private static <T> List<T> singleItemList(T item) {
return List.of(item);
}
public static void main(String[] args) {
List<Integer> list = singleItemList(1);
}
Тут <T>, опять же, говорит, что это обобщенный метод, и дальше в определении метода будет использоваться тип T (без ограничения, от чего он будет отнаследован).
Дальше при передаче в метод целого числа, итоговый возвращаемый тип станет List<Integer>, при передаче строки - List<String>, и т.д.