How to set constraints on generic types in Java?
I have a generic class:
public class ListObject<T>
{
// fields
protected T _Value = null;
// ..
}
Now I want to do something like the following:
ListObject<MyClass> foo = new ListObject<MyClass>();
ListObject<MyClass> foo2 = new ListObject<MyClass>();
foo.compareTo(foo2);
Question:
How can I define the compareTo()
method with resprect to the generic T
?
I guess I have to somehow implement a constraint on the generic T
, to tell that T
implements a specific interface (maybe Comparable
, if that one exists).
Can anyone provide me with a small code sample?
Solution 1:
Read also the discussion here: Generics and sorting in Java
Short answer, the best you can get is:
class ListObject<T extends Comparable<? super T>> {
...
}
But there is also reason to just use:
class ListObject<T extends Comparable> {
...
}
Solution 2:
This depends on exactly what you want the compareTo method to do. Simply defining the compareTo method to take other ListObject<T>
values is done by the following
public class ListObject<T> {
public int compareTo(ListObject<T> other) {
...
}
}
However if you want to actually call methods on that parameter you'll need to add some constraints to give more information about the T
value like so
class ListObject<T extends Comparable<T>> {
...
}
Solution 3:
Try public class ListObject<T extends U>
. Only T
s which implement U
(or derive from U
) will be allowable substitutions.