Java Generics. В чем разница Gen и Gen<?>

453
27 января 2017, 05:44

У меня есть Generic:

public class Gen<T> {
    private T value;
    public T getValue() {
        return value;
    }
}

и какой-то метод:

public void someMethod(Gen<?> gen) {
    System.out.println(gen.getValue());
}

Будет ли какая-то разница, если параметр метода someMethod будет иметь тип Gen вместо Gen<?>?

Я понимаю, что метасимвольный аргумент может делать extends или super.

Я правильно понял, что Gen это способ решения проблем унаследованного кода?

Answer 1

В данном случае разницы нет.

Разница существовала бы, если бы в классе Gen был метод, принимающий T:

public void setValue(T value) {
    this.value = value;
}

На Gen setValue выполнить можно, а на Gen<?> — нельзя.

Подстановочный параметр (wildcard) используется для установки ограничений на использование generic-класса. Методы, которые можно выполнить с классом Gen<?>, можно выполнить для любого Gen<T> без ошибок приведения типов.

Подробнее:

  • Java Language Specification
  • Tutorial: Wildcards
  • Stackoverflow: Difference between an unbound wildcard and a raw type
READ ALSO
Как вытащить из базы имя пользователя

Как вытащить из базы имя пользователя

Я сделал регистрацию, запихнул данные в sqlite, потом сделал вход, где проверял все данные с таблице, если пароль правильный, то пользователь...

476
Как по нажатию запустить скрипт?

Как по нажатию запустить скрипт?

Всем привет ребятаПишу приложение на web-e

393
Как считать данные из текстового файла в массив?

Как считать данные из текстового файла в массив?

Добрый деньСейчас имеется массив папок исходников:

783
RxJava 2 - повторная подписка на буфер

RxJava 2 - повторная подписка на буфер

Есть созданный Flowable без оберток:

420