Reputation: 5413
Class<? extends Something>
Here's my interpretation, it's class template but the class ? means the name of the class is undetermined and it extends the Something class.
if there's something wrong with my interpretation, let me know.
Upvotes: 67
Views: 90547
Reputation: 5858
There are a few confusing answers here so I will try and clear this up. You define a generic as such:
public class Foo<T> {
private T t;
public void setValue(T t) {
this.t = t;
}
public T getValue() {
return t;
}
}
If you want a generic on Foo to always extend a class Bar you would declare it as such:
public class Foo<T extends Bar> {
private T t;
public void setValue(T t) {
this.t = t;
}
public T getValue() {
return t;
}
}
The ?
is used when you declare a variable.
Foo<? extends Bar>foo = getFoo();
OR
DoSomething(List<? extends Bar> listOfBarObjects) {
//internals
}
Upvotes: 53
Reputation: 19989
You're right
Definition is that the class has to be subtype of Something
It's the same as Class<T>
, but there is a condition that T
must extends Something
Or implements Something
as Anthony Accioly suggested
It can also be class Something
itself
Upvotes: 10
Reputation: 14791
You're correct.
In Java generics, the ?
operator means "any class". The extends
keyword may be used to qualify that to "any class which extends/implements Something
(or is Something
).
Thus you have "the Class
of some class, but that class must be or extend/implement Something
".
Upvotes: 9
Reputation: 11542
You are almost right.
Basically, Java has no concept of templates (C++ has).
This is called generics.
And this defines a generic class Class<>
with the generics' attribute being any subclass of Something
.
I suggest reading up "What are the differences between “generic” types in C++ and Java?" if you want to get the difference between templates and generics.
Upvotes: 37
Reputation: 31604
You're correct.
However usually you will want to name the class that extends Something and write e.g. <E extends Something>
. If you use ?
you can't do anything with the given type later.
Upvotes: 4