Java- <t extends =“”的含义<t =“”>&gt;?</t>

时间:2011-12-16 16:58:33

标签: java generics polymorphism

完整的背景是:

public class RClass<T extends Comparable<T>>

我是否正确地说标题中的语句意味着插入方法的参数必须是实现Comparable或其派生类之一的类的对象?

感谢。

7 个答案:

答案 0 :(得分:33)

这意味着type参数必须支持通过Comparable接口与其自身类型的其他实例进行比较。

Oracle教程Object Ordering中提供了此类的示例。请注意以下摘录中与T extends Comparable<T>类似的模式:

public class Name implements Comparable<Name> {
   ...
   public int compareTo(Name n) { ... }
}

答案 1 :(得分:8)

Java- <T extends Comparable<T>> 的含义

a)Comparable <T> 是一个通用接口(记住它是一个“接口”,而不是“类”)

b)extends表示从类或接口继承。

从上述点#a开始,它是一个接口..(记住它是来自“接口”的继承,即不是来自“类”)

c)从上述两点来看#a&amp; #b,

这里“一个界面”扩展了“另一个界面”。

应该为这个类定义一个接口.. 这里只是一个例子

interface MinMax<T extends Comparable<T>> { 
    T min(); 
    T max(); 
} 

d)现在你的班级,public class RClass {}应该

1#EITHER“实施”这个“通用接口”Comparable<T> .. !!!

ex:public class RClass<T> implements Comparable<T>

2#或创建一个接口并扩展到这个“通用接口”Comparable<T>    例如:

interface MinMax<T extends Comparable<T>> { 
   T min(); 
   T max(); 
} 
class RClass<T extends Comparable<T>> implements MinMax<T> {
    .....
    .....
}

下面,    特别注意RClass和类型参数T的声明方式    然后转到MinMax。因为MinMax需要一种实现Comparable的类型,    实现类(在本例中为RClass)必须指定相同的边界。此外,    一旦建立了这个绑定,就不需要在implements子句中再次指定它。

答案 2 :(得分:5)

在该课程的某个地方,程序员需要编写类似

的内容
if(t.compareTo(othert) < 0) {
    ...
}

为了使它工作,类型T必须有一个compareTo方法,它将它与另一个类型为T的对象进行比较.Extend Comparable保证存在这样一个方法,等等。

答案 3 :(得分:2)

是的,请记住,来自Comparable ARE Comparable对象的类的对象。继承是is-a关系。

答案 4 :(得分:2)

这意味着您只能创建RClass的实例,其类型实际上扩展为Comparable<T>。因此,

RClass<Integer> a;

是可以接受的,因为Integer扩展了Comparable<Integer>,而

RClass<Object> b;

不是,因为Object不是一个可扩展的类。

答案 5 :(得分:1)

简单地说,泛型类型T必须具有可比性才能进行比较。否则你不能做T.compareTo。 在Item 28 Effective java中,它建议:Toolbar mToolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); AppBarLayout.LayoutParams toolbarLayoutParams = (AppBarLayout.LayoutParams) mToolbar.getLayoutParams(); toolbarLayoutParams.setScrollFlags(0); mToolbar.setLayoutParams(toolbarLayoutParams); AppBarLayout appBarLayout = (AppBarLayout) getActivity().findViewById(R.id.appBarLayout); CoordinatorLayout.LayoutParams appBarLayoutParams = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams(); appBarLayoutParams.setBehavior(null); appBarLayout.setLayoutParams(appBarLayoutParams);

答案 6 :(得分:1)

==&gt; guhanvj,<T extends Comparable<T>>表示<T>具有Comparable<T>个对象的上限。所以<T>可以有Byte,Character,Double,Float,Long,Short,String和Integer类的类型,它们都实现了Comparable<T>接口的自然排序。