gpt4 book ai didi

java - 对 ArrayList 进行排序

转载 作者:行者123 更新时间:2023-11-29 08:31:34 26 4
gpt4 key购买 nike

出于渲染顺序的目的,我正在尝试对 ArrayList<MyInterface> 进行排序通过每个对象中两个整数的总和。 ArrayList 中的对象实现相同的接口(interface)但没有共同的母类。

class A implements MyInterface, Comparable<MyInterface> {

@Override
public int compareTo(MyInterface object1) {
return (this.x+this.y)-(object1.getX()+object1.getY()); // Sort in ascending order
}

@Override
public int getX() { return this.x; }

@Override
public int getY() { return this.y; }
}

}

class B implements MyInterface, Comparable<MyInterface> {
//Same than A, but A & B have no common motherclass.
}


interface MyInterface {

int getX();
int getY();
int compareTo(MyInterface mi);

... //Other method that are the first reason I created the interface before.

}

然后我尝试像这样对我的数组列表进行排序:

ArrayList<MyInterface> myArrayList = new ArrayList<MyInterface>();
myArrayList.add(new A(1,2));
myArrayList.add(new A(5,6));
myArrayList.add(new B(3,1));
Collections.sort(gameRenderables); //I get the compile error here.

我得到错误:

Bound mismatch: The generic method sort(List<T>) of type Collections is not applicable for the arguments (ArrayList<Renderable>). The inferred type Renderable is not a valid substitute for the bounded parameter <T extends Comparable<? super T>>.

也许我正在努力让事情变得不可能。如果是这样的话,你能给我解决这个排序问题的替代方案吗?

最佳答案

您已将类定义为实现 Comparable而不是将接口(interface)定义为扩展 Comparable .如果不这样做,Java 编译器就无法知道 MyInterface 的每个可能的实现。实际上是Comparable .事实上,接口(interface)有一个 compareTo(MyInterface)与实现 Comparable<MyInterface> 的类的方法相匹配的方法是无关紧要的。

长话短说:

interface MyInterface extends Comparable<MyInterface> {
int getX();
int getY();

// No need for a compareTo method - we get it from the Comparable interface
}

class A implements MyInterface {
// No changes required to your implementation
}

关于java - 对 ArrayList<MyInterface> 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47701045/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com