Java- <T的含义扩展了Comparable >?
完整的上下文是:
public class RClass<T extends Comparable>
我是否正确地说标题中的语句意味着插入到方法中的参数必须是实现Comparable OR或其派生类之一的类的对象?
谢谢。
这意味着type参数必须通过Comparable接口支持与其自身类型的其他实例进行比较。
Oracle教程对象排序中提供了此类的一个示例。 请注意,与T extends Comparable
相似的模式在下面的摘录中T extends Comparable
:
public class Name implements Comparable { ... public int compareTo(Name n) { ... } }
Java-
的含义
?
a) Comparable
是一个通用接口(记住它是一个“接口”,即不是“类”)
b) extends
意味着从类或接口inheritance。
从上述点#a开始,它是一个接口..(记住它是来自“接口”的inheritance,即不是来自“类”)
c)从上面说的两个点#a和#b,
这里“一个界面”扩展了“另一个界面”。
应该为这个类定义一个接口..这里只是一个例子
interface MinMax> { T min(); T max(); }
d)现在你的class级,即public class RClass {}
应该
1#EITHER“实现”这个“通用接口” Comparable
.. !!!
ex: public class RClass
2#或创建一个接口并扩展到这个“通用接口” Comparable
ex:
interface MinMax> { T min(); T max(); } class RClass > implements MinMax { ..... ..... }
在这里,要特别注意RClass声明类型参数T然后传递给MinMax
。 因为MinMax
需要一个实现Comparable
的类型,所以实现类(在本例中为RClass)必须指定相同的边界。 此外,一旦建立了此绑定,就不需要在implements子句中再次指定它。
在该类的某个地方,程序员需要编写类似的东西
if(t.compareTo(othert) < 0) { ... }
为了实现这一点,类型T必须有一个compareTo方法,它将它与另一个类型为T的对象进行比较.Exxtnding Comparable保证了这种方法的存在等等。
是的,请记住从Comparable
ARE Comparable
对象派生的类的对象。 inheritance是is-a
关系。
这意味着您只能创建一个RClass
实例,其类型实际上扩展了Comparable
。 从而,
RClass a;
是可以接受的,因为Integer
扩展了Comparable
RClass
不是,因为Object
不是一个可扩展的类。
简单地说,generics类型T必须具有可比性才能进行比较。 否则你不能做T.compareTo。 在Item 28 Effective java中,它暗示: "always use Comparable super T> in preference to Comparable
==> guhanvj,
表示
具有Comparable
对象的上限。 所以
可以有Byte,Character,Double,Float,Long,Short,String和Integer类的类型,它们都实现了Comparable
接口以实现自然排序。