2010-05-05 48 views
2

我想做的线沿线的东西:Java:是否有可能只有需要比较类型的泛型类?

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

但我不能,因为,很显然,非专利药只接受与子类的限制,而不是接口。

重要的是我能够比较班内的类型,所以我应该如何去做这件事?理想情况下,我可以保持泛型的类型安全,而不必将T转换为Object,或者不需要编写大量的代码。换句话说,最简单的就是更好。

回答

7

implements是错误的。它只接受extendssuper。你可以在这里使用extends

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

要了解更多关于泛型,你可能会发现this tutorial (PDF)有用。

+0

Java的语法在这里有点不一致。如果泛型是原始设计的一部分,那么可能不会有'implements'关键字。 – Henning 2010-05-06 10:21:02

1

也适用于您必须使用的接口扩展。所以你的情况这将是:

public class MyClass<T extends Comparable<T>> { 
.... 
} 
+0

我觉得应该是'>',你错过了一个括号。 – 2010-05-06 00:11:12

+0

啊是的。谢谢! – Prine 2010-05-06 10:10:12

3

做到这一点的最好办法是:

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

如果你只是做<T extends Comparable<T>>,那么就不会可比类的子类的工作。