2012-02-06 2 views
4

Есть ли какие-либо преимущества использования подстановочных дженериков класса Bar над их полным пропуском?Генерируемые подстановочные символы Java unbound

public class Foo<T> {} 

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

Возможно, вы захотите посмотреть http://stackoverflow.com/questions/503721/generics-in-java-using-wildcards – assylias

ответ

6

Существует множество преимуществ.

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

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

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

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