【问题标题】:Comparator compare method() int cannot be dereferenced [duplicate]比较器比较方法() int 不能被取消引用
【发布时间】:2014-02-01 20:23:34
【问题描述】:

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

我得到了这个示例代码:

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;
}
}

但是,当我尝试这样做时,会发生这种情况:

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.

有什么想法吗?

【问题讨论】:

    标签: java compiler-errors int comparator dereference


    【解决方案1】:

    int 是原语不是对象,因此没有任何方法。因此,当您尝试对其调用 .compareTo 时,您会收到错误消息。

    要比较整数,您可以使用标准比较运算符&lt; &gt; ==,您可以将其包装在Integer 对象中,并像现在一样使用比较方法。虽然前者是有利的。

    【讨论】:

      【解决方案2】:

      您可以通过this链接找到上述错误的原因。 您可以使用以下易于理解的方法之一。 (按升序排列)

          if(d1.getNoOfStars() != d2.getNoOfStars())
          return d1.d1.getNoOfStars() - d2.getNoOfStars(); 
      

          if(d1.getNoOfStars() != d2.getNoOfStars())
          return d1.d1.getNoOfStars() > d2.getNoOfStars() ? 1 : -1; 
      

      【讨论】:

        【解决方案3】:

        // 如果 Person.getName() 返回一个字符串,那么您可以简单地执行以下操作来 // 实现 Comparable:

        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
           }
        }
        

        【讨论】:

        • "如果 Person.getName() 返回一个字符串,那么您可以简单地执行以下操作来..."创建一个编译时错误。
        【解决方案4】:

        您收到此错误消息,因为 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());
            }
        }
        

        【讨论】:

          【解决方案5】:

          您不需要调用方法来比较原始ints。事实上,正如你所发现的,你不能。

          只需使用普通的&lt;&gt;== 运算符来比较ints。

          只要确保遵循contract of compare——如果d1“小于”d2,则返回一个小于0、等于0或大于0int,如果@987654332 @ 分别“等于”d2,或者d1 分别“大于”d2

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-10-27
            • 2018-06-30
            • 1970-01-01
            • 2017-12-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多