Обобщенные шаблоны подстановочных знаков Java - PullRequest
4 голосов
/ 06 февраля 2012

Есть ли какие-либо преимущества использования шаблонов типа подстановки в классе Bar по сравнению с их полным пропуском?

public class Foo<T> {}

public interface Bar {
    public void addFoo(Foo<?> foo);
    public Foo<?> getFoo(String name);
}

1 Ответ

6 голосов
/ 06 февраля 2012

Есть несколько преимуществ.

  • Они не будут выдавать предупреждения компилятора, как при использовании необработанного типа
  • Они дают больше безопасности типа. Например, рассмотрим, если Foo было List вместо этого. Если бы вы использовали List вместо List<?>, вы могли бы сделать это:

    myBar.getFoo("numbers").add("some string");
    

    , даже если список был только , предполагается , чтобы содержать Number с. Если вы вернули List<?>, то вы не сможете добавить к нему что-нибудь (кроме null), поскольку тип списка неизвестен.

  • Они документируют нечто совершенно иное, чем необработанный тип, а именно, что Foo напечатано на некотором неизвестном, но конкретном типе .
...