如何将任何实现特定接口的类作为参数传递并使用其方法?

时间:2012-10-28 18:51:32

标签: java generics interface comparator

我创建了自己的“LinkedList”类,它可以接受使用泛型指定的对象。

在该类中,我希望有一个 sort(ComparatorObject)方法,该方法接受一个Class实现Comparator的对象。

原因在于,对于我的测试对象,特别是Shapes,我想看看我是否可以按用户选择的各个字段对它们进行排序,例如形状的区域,周长,类型等。

现在,我的一个比较器类定义如下:

public class Comparator_Area implements Comparator<Shape>{

@Override
public int compare(Shape shape1, Shape shape2) {
    int valueToReturn = 0;

    if(shape1.getArea() < shape2.getArea()){
        valueToReturn = -1;
    }
    else if(shape1.getArea() < shape2.getArea()){
        valueToReturn = 1;
    }

    return valueToReturn;
}
}

在我的LinkedList类中,我的sort方法定义如下(我不知道它是否正确,但它是我在查找如何执行此操作时发现的):

public void sort(Class<? extends Comparator<E>> comparator){

}

当然,我希望能够在sort方法中使用这样的东西:

comparator.compare(shape1, shape2);

但是我不能使用“比较”,我真的不知道我应该怎么做到这一点。

2 个答案:

答案 0 :(得分:3)

您应该在排序方法中发送Comparator对象作为参数:

public void sort(Comparator<Shape> comparator){

}

这假设您的LinkedList类只有Shape个。如果您有一个通用的LinkedList实现,那么您可以传递Comparator<T>

public class MyLinkedList<T> {
    //other methods...

    public void sort(Comparator<T> comparator){

    }
}

答案 1 :(得分:1)

您正在传递Class对象作为参数。请尝试以下方法:

public void sort(Comparator<T> comparator){

}

其中TLinkedList

的通用类型