比较两种方法时出错

时间:2017-11-11 15:34:37

标签: java casting compareto

所以我试图做一个简单的程序,可以使用泛型找到复数的模块并比较两个模块:

public class ComplexNumber <T extends Number,U extends Number>
    implements Comparable<ComplexNumber<T, U>>
{
    private T real;
    private U imaginary;

    public ComplexNumber(T real, U imaginary)
    {
        this.real=real;
        this.imaginary=imaginary;
    }

    public T getReal()
    {
        return real;
    }

    public int compareTo(ComplexNumber<?, ?> o)
    {
        return this.modul().compareTo(o.modul());
    }

    public U getImaginary()
    {
        return imaginary;
    }

    public double modul()
    {
        double c=Math.sqrt(real.doubleValue()*real.doubleValue()+imaginary.doubleValue()*imaginary.doubleValue());
        return c;
    }

    public String toString()
    {
        return String.format("%.2f+%.2fi", real.doubleValue(), imaginary.doubleValue());
    }
}

但它在.compareTo函数中给出了两个实时错误:“无法在基本类型double上调用compareTo(double)”

和课程开头的一个:“此行的多个标记          - ComplexNumber类型必须实现继承的抽象方法      可比&GT; .compareTo(ComplexNumber)          - ComplexNumber类型必须实现继承的抽象方法“

1 个答案:

答案 0 :(得分:1)

你正在寻找以下内容:

@Override
public int compareTo(ComplexNumber<T, U> o) {
        // logic
}

修改

如果您肯定需要使用通配符,那么您需要将类声明更改为:

class ComplexNumber <T extends Number,U extends Number> implements Comparable<ComplexNumber<?, ?>>

在这种情况下,您可以保留compareTo方法签名。

关于您收到的第一个错误,这是因为您尝试在原始类型compareTo上调用double方法,而这种方法根本不起作用。要解决此问题,您需要使用Double.compare并传入适当的数据。

@Override
public int compareTo(ComplexNumber<?, ?> o) {
       return Double.compare(modul(), o.modul());
}