gpt4 book ai didi

java - 比较 ArrayList 中对象的泛型

转载 作者:太空宇宙 更新时间:2023-11-04 14:28:45 25 4
gpt4 key购买 nike

我正在尝试创建一个通用类来比较数组列表中的对象并返回最大的。我的问题是我不太确定我完全理解泛型是如何工作的。

可衡量:

import java.util.ArrayList;

/**
Describes any class whose objects can be measured.
*/

public abstract class Measurable<T>{

abstract double getMeasure();

public static <T extends Measurable<T>> T getLargest(ArrayList<T> objects){
T largest = objects.get(0);
for(int i = 0; i < objects.size(); i ++){
if(largest.getMeasure() == objects.get(i).getMeasure()){
largest = objects.get(i);
}
}
return largest;
}

}

盒子:

import java.awt.Rectangle;
import java.util.ArrayList;


public class Box extends Measurable {

private Rectangle box;
private static ArrayList<Rectangle> rectangles;

public Box(){
box = new Rectangle();
rectangles = new ArrayList<Rectangle>();
}

public ArrayList<Rectangle> create(){
for(int i = 0; i < 10; i++){
box = new Rectangle((int) Math.random(), (int) Math.random());
rectangles.add(box);
}
return rectangles;
}

@Override
public double getMeasure() {
double area = 0;
for(int i = 0; i < rectangles.size(); i++){
area = rectangles.get(i).getWidth()*rectangles.get(i).getHeight();
}
return area;
}

public static void main(String[] args){
Box b = new Box();
b.getLargest(b.create());
}
}

我遇到一个问题,它说“Measurable 类型中的方法 getLargest(ArrayList) 不适用于参数 (ArrayList)”,但我不应该能够为 getLargest 类使用任何对象吗?

最佳答案

正如您所写,getLargest 期望 List传递给它的对象实现Measurable,但 java.awt.Rectangle 没有。

当你写

public static <T extends Measurable<T>> T getLargest(ArrayList<T> objects){

声明了一个不同T,但命名相同,与Measurable中的T相同类作为一个整体,这可能会导致完全困惑。

如果您实际上在代码中将 T 替换为 Rectangle,您可以看到您正在尝试调用 Rectangle.getMeasure() ,这是一个不存在的方法。

关于java - 比较 ArrayList 中对象的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26389860/

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