LTH*_*LTH 37 java generics polymorphism
完整的背景是:
public class RClass<T extends Comparable<T>>
Run Code Online (Sandbox Code Playgroud)
我是否正确地说标题中的语句意味着插入到方法中的参数必须是实现Comparable OR类派生类的类的对象?
谢谢.
And*_*mas 38
这意味着type参数必须支持通过Comparable接口与其自身类型的其他实例进行比较.
Oracle教程对象排序中提供了此类的一个示例.请注意T extends Comparable<T>下面摘录中的类似模式:
public class Name implements Comparable<Name> {
...
public int compareTo(Name n) { ... }
}
Run Code Online (Sandbox Code Playgroud)
小智 10
Java-意思是 <T extends Comparable<T>>什么?
a)Comparable <T>
是一个通用接口(记住它是一个"接口",即不是"类")
b)extends表示从类或接口继承.
从上述点#a开始,它是一个接口..(记住它是来自"接口"的继承,即不是来自"类")
c)从上面说的两个点#a和#b,
这里"一个界面"扩展了"另一个界面".
应该为这个类定义一个接口..这里只是一个例子
interface MinMax<T extends Comparable<T>> {
T min();
T max();
}
Run Code Online (Sandbox Code Playgroud)
d)现在你的班级即public class RClass {}应该
1#EITHER"实现"这个"通用接口" Comparable<T>.. !!!
例如: public class RClass<T> implements Comparable<T>
2#或创建一个接口并扩展到这个"通用接口" Comparable<T>
ex:
interface MinMax<T extends Comparable<T>> {
T min();
T max();
}
class RClass<T extends Comparable<T>> implements MinMax<T> {
.....
.....
}
Run Code Online (Sandbox Code Playgroud)
在这里,要特别注意RClass声明类型参数T然后传递给它的方式MinMax.因为MinMax需要实现的类型Comparable,所以实现类(在本例中为RClass)必须指定相同的边界.此外,一旦建立了此绑定,就不需要在implements子句中再次指定它.
在该类的某个地方,程序员需要编写类似
if(t.compareTo(othert) < 0) {
...
}
Run Code Online (Sandbox Code Playgroud)
为此,类型T必须具有一个compareTo-method,该方法将它与类型T的另一个对象进行比较。