2017-11-11 123 views
0

所以我试图做一个简单的程序,可以找到一个复杂的使用数量泛型的模块,并比较两个模块:错误而比较两种方法

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功能说明:

,一个在类的开头“的基本类型双不能调用的compareTo(双)”:“在这一行 多个标记 - 类型ComplexNumber必须实现继承的抽象方法 Comparable> .compareTo(ComplexNumber) - Typ ËComplexNumber必须实现继承的抽象方法“

回答

1

你要找的线沿线的东西:

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

编辑

,如果你一定要使用通配符,那么你就需要将类别声明更改为:

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

在这种情况下,您可以将compareTo方法签名原样。

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

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

不能这样做。它说在方法中必须使用通配符。 –

+0

谁说的..? –

+0

在我的assigment它说我需要使用通配符。 –