问题
Are there any advantages of using wildcard-type generics in the Bar class over completely skipping them?
public class Foo<T> {}
public interface Bar {
public void addFoo(Foo<?> foo);
public Foo<?> getFoo(String name);
}
回答1:
There are multiple advantages.
- They won't produce compiler warnings like using the raw type would
They give more type safety. For example, consider if
FoowasListinstead. If you usedListinstead ofList<?>, you could do this:myBar.getFoo("numbers").add("some string");even if the list was only supposed to contain
Numbers. If you returned aList<?>, then you would not be able to add anything to it (exceptnull) since the type of list is not known.- They document something completely different than a raw type, namely that
Foois typed on some unknown but specific type.
来源:https://stackoverflow.com/questions/9164886/java-unbound-wildcard-generics