【发布时间】:2017-10-21 06:55:41
【问题描述】:
这是我的主要结构: 一些接口方法在A类中实现,其余的都在子类中实现。
public interface I
{
// some methods
//
}
public abstract class A implements I
{
// some variables and methods
//
}
public class B extends A
{
// some variables and methods
//
}
public class C extends A
{
// some variables and methods
//
}
public abstract class D extends A
{
// some variables and methods
//
}
public class E extends D
{
// some variables and methods
//
}
public class Test
{
public static void main(String[] args)
{
ArrayList<I> la = new ArrayList<I>();
la.add(new B(..));
la.add(new C(..));
la.add(new C(..));
la.add(new B(..));
la.add(new E(..));
}
}
B、C、E类都有构造函数。
我需要按A类的变量对la进行排序,变量是int数据类型。
我试着改成
public abstract class A implements I, Comparable<A>
但由于在所有非抽象类中缺少 public int compareTo(A o) 方法,我得到一个错误。
我需要做什么?
谢谢。
【问题讨论】:
-
如果缺少某些东西,那么添加缺少的实体的想法如何。
-
类对象的排序是基于您的逻辑的。 JVM 不能神奇地为你定义它。你需要在某个地方定义它。如果实现 Comparable 接口,则需要在其抽象方法
compareTo的implwmwntation 中定义比较逻辑,您必须提供该方法的实现。添加它,实现比较逻辑。可能是您将能够解决问题,或者您将有更多有意义和具体问题。 -
所以我需要在 A 类中实现 public int compareTo(A o) ?
-
如果可以的话,在
A中实现,那么你只需要写一次。您也可以在B、C和E中实现,或者只是在其中一个类中覆盖它,但我无法想象您为什么想要或需要这样做。 -
我怎样才能只在
class A中实现这个方法。我在class A中没有构造函数,所以我不知道该怎么做。在 void main 我使用Collections.sort。谢谢。
标签: java sorting arraylist comparator comparable