tags:

views:

105

answers:

3

I wanted to do something along the lines of:

public class MyClass<T implements Comparable> {
    ....
}

But I can't, since, apparently, generics only accept restrictions with subclasses, and not interfaces.

It's important that I'm able to compare the types inside the class, so how should I go about doing this? Ideally I'd be able to keep the type safety of Generics and not have to convert the T's to Object as well, or just not write a lot of code overall. In other words, the simplest the better.

+7  A: 

The implements is wrong. It only accepts extends or super. You can use here extends:

public class MyClass<T extends Comparable<T>> {
    // ...
}

To learn more about Generics, you may find this tutorial (PDF) useful.

BalusC
Java's syntax is a little inconsistent there. If Generics had been part of the original design, there probably would be no `implements` keyword.
Henning
+1  A: 

Also for interfaces you have to use extends. So in your case it would be:

public class MyClass<T extends Comparable<T>> {
....
}
Prine
I think it should be `<T extends Comparable<T>>`, you missed a bracket.
SHiNKiROU
Ah yes. Thanks!
Prine
+2  A: 

The best way to do it is:

public class MyClass<T extends Comparable<? super T>> {
    ....
}

If you just do <T extends Comparable<T>>, then it won't work for subclasses of comparable classes.

newacct