我收到错误:a.getLargest(a.create());
在主要方法。它说
我必须在
中实施该方法Geo
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.util.ArrayList;
import java.util.Collection;
public class Test extends Measurable {
private Geo test;
private static ArrayList<Geo> object;
public Test(){
test = new Geo();
object = new ArrayList<Geo>();
}
public double getMeasure() {
double size = 0;
for(int i = 0; i < object.size(); i++){
size = object.get(i).getArea()*object.get(i).getPerimeter();
}
return size;
}
public ArrayList<Geo> create(){
for(int i = 0; i < 10; i++){
test = new Geo(i, i);
object.add(test);
}
return object;
}
public static void main(String[] args){
Test a = new Test();
a.getLargest(a.create());
}
}
那就是GeoClass
public class GeometricObject extends Measurable<GeometricObject>{
答案 0 :(得分:0)
似乎你不明白&#34;实施&#34;一个界面。您的Test
类以非通用方式实现Measurable
。所以实际上你正在实施Measurable<Object>
。到目前为止一切都那么好,但后来你创建了一个Geo
对象。在您的问题中,您没有显示Geo
实现Measurable<Geo>
,因此我认为不是。如果Geo
未实现Measurable<Geo>
,则对getLargest
的调用将失败,因为getLargest
调用getMeasure
Geo
中很可能不存在Measurable<Geo>
。相反,您应该在Geo
类中实现public class Geo implements Measurable<Geo> {
public double getMeasure () {
//some code
}
//other code
}
。
Test
我猜你在这里的困惑可能是你认为Object
实现一个接口时,它的所有成员都会实现它。 但那不是真的,好吗?
要记住的另一件事是当你没有指定泛型类型参数时,它默认为InAppBrowser
而不是实现界面的类型!