可比接口如何工作?

阿诺德

我正在学习Java,想对包含对象的数组进行排序。为此,我想使用Comparable。我一直遇到编译错误,似乎表明我要么没有实现compareTo(我做了),要么是Comparator出了点问题(目前我不想使用)。我在下面列出的一个小程序中隔离了该问题。非常感谢您的帮助,因为我花了很多时间在网上搜索。

我已经注释掉main的一些代码,因为我真正想做的是创建一个带有接口对象的数组,并使用Comparable对其进行排序。我不确定这是否可行,所以我现在正在测试排序类。

软件包comp_test;

  import java.util.ArrayList;
  import java.util.List;

  public class program {

    public static void main(String[] args) 
    {
        List<root> container = new ArrayList<root> ();

        container.add (new A ("Een"));
  //        container.add (new AA ("twee"));
        container.add (new B ("drie"));
  //        container.add (new AA ("vier"));
        container.add (new A ("en Vijf"));

        for (root r: container)
        {
            r.show ();
        } // for
        List.sort (container); // <=== error
        // The method sort(Comparator) in the type List is not 
        // applicable for the arguments (List<root>
    }

  /*
    public static void main(String[] args) 

    {
        List<Itf> container = new ArrayList<Itf> ();

        container.add (new A ("Een"));
        container.add (new AA ("twee"));
        container.add (new B ("drie"));
        container.add (new AA ("vier"));
        container.add (new A ("en Vijf"));

        for (Itf i: container)
        {
            i.show ();
        } // for
        container.sort ();
    }
  */
  }

  --------------
  package comp_test;

  public interface Itf 
  {
    public void show ();
  }
  ---------------
  package comp_test;

  abstract public class root  implements Itf, Comparable<root> 
  {
    abstract public void show ();
    abstract public String getID ();

    @Override
    public int compareTo (root other) 
    {
        return this.getID ().compareTo (other.getID ());
    } /*** compareTo ***/

  }
  ------------------
  package comp_test;

  public class A extends root  
  {
    private String ID;

    public A (String id) 
    {
        this.ID = id;
    } /*** A ***/

    public String getID ()
    {
        return ID;
    } /*** getID ***/

    @Override
    public void show ()
    {
        System.out.println ("A (" + getID () + "): " + super.toString ());
    } /*** show ***/

  }
  ------------------
  package comp_test;

  public class B extends root 
  {
    private String Name;

    public B (String id)
    {
        this.Name = id;
    } /*** B ***/

    @Override 
    public String getID ()
    {
        return Name;
    } /*** getID ***/

    @Override
    public void show ()
    {
        System.out.println ("B (" + Name + "): " + super.toString ());
    } /*** show ***/

  }
克里托斯·基里亚库(Klitos Kyriacou)

您尝试按以下方式调用排序:

List.sort(container);

每当遇到这样的编译器错误时,都应查看Javadoc中引起错误的方法。查看List.sortJavadoc,我们可以看到该方法不是静态的,但是您正试图像使用它那样使用它。由于该方法不是静态的,因此您需要在要排序的对象上调用该方法:

container.sort(null);

进一步阅读该方法后,Javadoc指出,如果您要使用所包含对象的自然顺序(即,它们的compareTo方法),则应传递null而不是比较器(如上所述)。

顺便说一句,您也可以调用,Collections.sort(container);但这只是一个包装器,而它所做的只是call container.sort(null)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章