如何指定对象在Java中实现接口?

时间:2014-09-21 23:36:18

标签: java

请考虑以下两行:

arr = (J[]) new Object[10];

public void add(J obj){

我想在这里指定J实现Comparable,所以我可以编写

while(arr[i] < obj)

如何指定?

编辑:David Wallace的回答看起来是正确的,但我不知道如何在接口和类定义中适当地调整变量的范围。目前,它们是:

public interface OrderedListADT<J> extends Iterable<J> {

public class OrderedVector<J> implements OrderedListADT<J>{

3 个答案:

答案 0 :(得分:3)

如果它实现Comparable,则可以使用其compareTo方法(给定适当类型的表达式)。如果实例的类型为>(或其他),则没有语法可以让您使用>=<<=Comparable运算符。

答案 1 :(得分:2)

如果您在课程级别定义它,那么您可以写下:

public class OrderedVector<J extends Comparable<J>> implements OrderedListADT<J>

如果您希望强制此接口的所有用户插入Comparable可以以类似的方式在接口级别定义它,但在班级定义它会很好。

要进一步添加,实现Comparable的类只有compareTo方法(返回负数,零或正数,分别小于,等于或大于Java不会使运算符重载,因此不会有任何小于/大于符号的位置。

答案 2 :(得分:0)

我认为我们需要更多细节,因为它不清楚你的情况。但是,假设您有一些类MyClass(可能是一个抽象类),它不实现Comparable,但您希望此类的某些子类实现Comparable

public void add(MyClass obj) {
    ...
    ...
    // We execute some logic, and if we get to this point, we can be sure that obj is
    // *supposed* to be of a subclass that implements Comparable.

    if (((Comparable)obj).compareTo(otherObj) < 0) {

如上所示,您可以使用强制转换将obj视为Comparable,然后您可以使用compareTo方法。 (您不能直接在Java中的<上使用Comparable。)如果我们的假设是错误的且obj确实不是Comparable,那么ClassCastException将在运行时抛出。

你也可以事先检查一下:

    if (obj instanceof Comparable) {
        int comparison = ((Comparable)obj).compareTo(otherObj);
        ...
    } else {
        doSomethingUnusualBecauseObjIsntReallyComparable();
    }