我正在尝试创建一个通用类来比较数组列表中的对象并返回最大的。我的问题是我不太确定我完全理解泛型是如何工作的。
可衡量:
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()
,这是一个不存在的方法。
我是一名优秀的程序员,十分优秀!