本节主要内容
- Ordering与Ordered特质
- 上下文界定(Context Bound)
- 多重界定
- 类型约束
1. Ordering与Ordered特质
在介绍上下文界定之前,我们对scala中的Ordering与Ordered之间的关联与区别进行讲解,先看Ordering、Ordered的类继承层次体系:
通过上面两个图可以看到,Ordering混入了java中的Comparator接口,而Ordered混入了java的Comparable接口,我们知道java中的Comparator是一个外部比较器,而Comparable则是一个内部比较器,例如:
//下面是定义的Person类(Java)
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
Person(String name){
this.name=name;
}
}
//Comparator接口,注意它是在java.util包中的
public class PersonCompartor implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
if (o1.getName().equalsIgnoreCase(o2.getName())) {
return 1;
}else{
return -1;
}
}
public static void main(String[] args){
PersonCompartor pc=new PersonCompartor();
Person p1=new Person("摇摆少年梦");
Person p2=new Person("摇摆少年梦2");
//下面是它的对象比较使用方式
//可以看它,这是通过外部对象进行方法调用的
if(pc.compare(p1, p2)>0) {
System.out.println(p1);
}else{
System.out.println(p2);
}
}
}
而Comparable接口是用于内部比较,Person类自己实现Comparable接口,代码如下
public class Person implements Comparable<Person>{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
Person(String name){
this.name=name;
}
@Override
public int compareTo(Person o) {
if (this.getName().equalsIgnoreCase(o.getName())) {
return 1;
}else{