我试图创建一个比较数组列表中的对象并返回最大值的泛型类。我的问题是,我不太确定我完全理解泛型是如何工作的。
可测量:
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());
}
}
我遇到了一个问题,它说的是#34;类型为Measurable的方法getLargest(ArrayList)不适用于参数(ArrayList)&#34;但我不应该为getLargest类使用任何对象吗?
答案 0 :(得分:0)
正如您所写,getLargest
期望List
中的对象传递给它以实现Measurable
,但java.awt.Rectangle
不会。
写作时
public static <T extends Measurable<T>> T getLargest(ArrayList<T> objects){
宣告T
与不同,但命名相同,与T
类中的Measurable
整体相同,这可能是导致完全混乱。
如果您确实在代码中将T
替换为Rectangle
,则可以看到您正在尝试调用Rectangle.getMeasure()
,这是一种不存在的方法。< / p>
答案 1 :(得分:0)
我不确定泛型在哪里发挥作用。看起来你想要制作一堆从基类Measurable派生的形状。您还希望抽象类包含一些用于使用Measurable子类的代码。基本上你需要创建一个实现Measurable的子类。我想你想要的Box类如下所示。
public class Box extends Measurable {
private double width;
private double height;
public Box(double width, double height){
this.width = width;
this.height = height;
}
public double getMeasure() {
double area = width*height;
return area;
}
}