编译接口实现时出错

时间:2015-10-27 02:09:48

标签: java generics

我收到错误: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>{

1 个答案:

答案 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而不是实现界面的类型!