我正在学习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 ***/
}
您尝试按以下方式调用排序:
List.sort(container);
每当遇到这样的编译器错误时,都应查看Javadoc中引起错误的方法。查看List.sort的Javadoc,我们可以看到该方法不是静态的,但是您正试图像使用它那样使用它。由于该方法不是静态的,因此您需要在要排序的对象上调用该方法:
container.sort(null);
进一步阅读该方法后,Javadoc指出,如果您要使用所包含对象的自然顺序(即,它们的compareTo方法),则应传递null而不是比较器(如上所述)。
顺便说一句,您也可以调用,Collections.sort(container);
但这只是一个包装器,而它所做的只是call container.sort(null)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句