import java.util.Comparator;
class Student implements Comparable<Student>
{
private int rn;
private float cg;
private String name;
public Student(int num, float cgpa, String nm)
{
rn = num; cg = cgpa; name = nm;
}
public int getrn()
{ return rn;
}
public float getcg()
{ return cg;
}
public String getname()
{ return name;
}
public static class orderbyrn implements Comparator<Student>
{
@Override
public int compare(Student obj1, Student obj2)
{
return obj1.rn>obj2.rn? 1 : (obj1.rn<obj2.rn? -1 : 0 );
}
}
public static class orderbycg implements Comparator<Student>
{
@Override
public int compare(Student obj1, Student obj2)
{
return obj1.cg>obj2.cg? 1 : (obj1.cg<obj2.cg? -1 : 0 );
}
}
/* NOTE THIS FAILS TO COMPILE!
public static class testingcomparable implements Comparable<Student>
{
@Override
public int compareTo(Student obj)
{
return cg>obj2.cg? 1 : (cg<obj2.cg? -1 : 0 );
}
}
*/
@Override
public int compareTo(Student obj2) //while overriding types have to be compatible ie either same or related by inheritance
{
return rn>obj2.rn? 1 : (rn<obj2.rn? -1 : 0 );
}
public String toString()
{
return rn+name+cg;
}
}
显示的错误是: &#34;非静态变量cg不能从静态上下文引用&#34; 我被卡住了。任何帮助将非常感激。谢谢。 请原谅我,如果我不够清楚的话。第一次发帖提问! :d
答案 0 :(得分:0)
它失败是因为您在嵌套的静态类cg
中引用了Student
类的testingcomparable
字段 - 它无法看到Student
的实例字段}类。 orderbycg
有效,因为它引用了对象cg
和obj1
上的obj2
字段。
答案 1 :(得分:0)
Comparable
和Comparator
之间的本质区别在于,前者为类定义 自然顺序 。请注意该句中的定冠词:只能有一个自然顺序。另一方面,您可以多次实施Comparator
来定义同一类别的其他仲裁订单。
请注意以上方法如何反映在方法签名中:compareTo()
只接受另一个对象,假设this
为左侧。您试图在单独的类中实现它,其中this
未引用Student
,这是您的代码无法编译的直接原因。