完整的背景是:
public class RClass<T extends Comparable<T>>
我是否正确地说标题中的语句意味着插入方法的参数必须是实现Comparable或其派生类之一的类的对象?
感谢。
答案 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>
接口的自然排序。