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);
}
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);
}
There are multiple advantages.
They give more type safety. For example, consider if
Foo
wasList
instead. If you usedList
instead ofList<?>
, you could do this:even if the list was only supposed to contain
Number
s. If you returned aList<?>
, then you would not be able to add anything to it (exceptnull
) since the type of list is not known.Foo
is typed on some unknown but specific type.