Java 无法取消对Comparator compare method()int的引用

Java 无法取消对Comparator compare method()int的引用,java,compiler-errors,int,comparator,dereference,Java,Compiler Errors,Int,Comparator,Dereference,我正在做一些作业,我遇到了一个问题 我得到了以下示例代码: public class PersonNameComparator implements Comparator<Person>{ public int compare(Person p1, Person p2) { int retValue = p1.getName().compareTo(p2.getName()); if (retValue != 0) return retValue;

我正在做一些作业,我遇到了一个问题

我得到了以下示例代码:

public class PersonNameComparator implements Comparator<Person>{
public int compare(Person p1, Person p2) {
    int retValue = p1.getName().compareTo(p2.getName());
    if (retValue != 0)
        return retValue;
    else if (p1.getAge() < p2.getAge())
        return -1;  
    else if (p1.getAge() > p2.getAge())
        return 1;
    else
        return 0;
}
}
公共类PersonNameComparator实现Comparator{
公共整数比较(人员p1、人员p2){
int retValue=p1.getName().compareTo(p2.getName());
如果(retValue!=0)
返回值;
else if(p1.getAge()p2.getAge())
返回1;
其他的
返回0;
}
}
但是,当我尝试这样做时,会发生以下情况:

public class DVDComparator implements Comparator <DVD> {

public int compare(DVD d1,DVD d2)
    {       
     int stars1 = d1.getNoOfStars().compareTo(d2.getNoOfStars());
     //ERROR - int cannot be dereferenced.
公共类dvdparator实现了Comparator{
公共整数比较(DVD d1、DVD d2)
{       
int stars1=d1.getNoOfStars().compareTo(d2.getNoOfStars());
//错误-无法取消对int的引用。

有什么想法吗?

您不需要调用方法来比较primitive
int
s。事实上,正如您所发现的,您不可能

只需使用普通的
=
运算符来比较
int
s

如果
d1
小于
d2
,如果
d1
大于
d2
,如果
d1
等于
d2
,或者
d1
大于
d2
,只需确保按照-返回
int
值即可

比较其两个参数的顺序。当第一个参数小于、等于或大于第二个参数时,返回负整数、零或正整数


int
作为一个基元不是一个对象,因此没有任何方法。因此,当您尝试调用
.compareTo
时,您会得到一个错误


要比较int,可以使用标准比较运算符
<>=
,也可以将其包装在
Integer
对象中,并像现在这样使用比较方法。尽管前者是有利的。

您会收到此错误消息,因为getNoOfStars()返回原始int,并且没有方法compareTo()为基元类型定义

如果您使用的是Java SE 7,则可以使用如下内容:

public class DVDComparator implements Comparator <DVD> {

    public int compare(DVD d1,DVD d2){       
        return Integer.compare(d1.getNoOfStars(), d2.getNoOfStars());
    }
}
公共类dvdparator实现了Comparator{
公共整数比较(DVD d1,DVD d2){
返回Integer.compare(d1.getNoOfStars(),d2.getNoOfStars());
}
}
//如果Person.getName()返回一个字符串,则只需执行以下操作即可//实现:

public class PersonNameComparator implements Comparator<Person>{
   public int compare(Person p1, Person p2) {
    return p1.getName() - p2.getName();       // It's the ninja way to do it
   }
}
公共类PersonNameComparator实现Comparator{
公共整数比较(人员p1、人员p2){
返回p1.getName()-p2.getName();//这是忍者的方法
}
}

您可以通过链接找到上述错误的原因。 您可以使用以下简单易懂的方法之一。(按升序排序)

“如果Person.getName()返回一个字符串,那么您可以简单地执行以下操作…”创建编译时错误。
    if(d1.getNoOfStars() != d2.getNoOfStars())
    return d1.d1.getNoOfStars() - d2.getNoOfStars(); 
    if(d1.getNoOfStars() != d2.getNoOfStars())
    return d1.d1.getNoOfStars() > d2.getNoOfStars() ? 1 : -1;