I'm sure there is a good reason, but why is the extends constraint necessary in the generics spec? For example:
public class Foo <E extends Bar>
instead of
public class Foo <Bar>
It seems to me that proper design would usually dictate that Bar be an abstract class or interface in this instance anyway, so the extends constraint should be implicit. I am new to Java generics but have some experience with templates in C++. What am I missing here?