我必须实现一个类ComplexNumber
。它有两个通用参数T
和U
,它们必须来自继承自Number类的某个类。 Complex类有2个字段(实例变量):实部和虚部,必须实现这些方法:
ComplexNumber(T real, U imaginary)
- 构造函数getReal():T
getImaginary():U
modul():double
- 这是复数模数compareTo(ComplexNumber<?, ?> o)
- 此方法根据2个复数的模数进行比较我已经实现了除最后一个compareTo
之外的所有这些方法,因为我不知道如何使用这些通配符进行操作。
这是我的代码:help here - pastebin
class ComplexNumber <T extends Number,U extends Number> implements Comparable<ComplexNumber> {
private T real;
private U imaginary;
public ComplexNumber(T real, U imaginary) {
super();
this.real = real;
this.imaginary = imaginary;
}
public T getR() {
return real;
}
public U getI() {
return imaginary;
}
public double modul(){
return Math.sqrt(Math.pow(real.doubleValue(),2)+ Math.pow(imaginary.doubleValue(), 2));
}
public int compareTo(ComplexNumber<?, ?> o){
//HELP HERE
}
}
有人帮忙用这种方法吗?
答案 0 :(得分:2)
由于您只需要比较模数,因此您不必关心类型参数。
@Override
public int compareTo(ComplexNumber<?, ?> o) {
return Double.valueOf(modul()).compareTo(Double.valueOf(o.modul()));
}
但是,您还必须在类型声明中添加通配符
class ComplexNumber <T extends Number,U extends Number> implements Comparable<ComplexNumber<?, ?>>
答案 1 :(得分:0)
试一试:
class ComplexNumber<T extends Number, U extends Number> implements Comparable<ComplexNumber<T, U>> {
@Override
public int compareTo(ComplexNumber<T, U> o) {
return 0;
}
}
答案 2 :(得分:0)
看起来你的两个参数都可以处理扩展java.lang.Number的类,并且所有具体的类都与你想要的方式进行比较如下:
@Override
public int compareTo(ComplexNumber o) {
if (o.real instanceof BigInteger && this.real instanceof BigInteger) {
int realCompValue = ((BigInteger)(o.real)).compareTo((BigInteger)(this.real));
if (realCompValue == 0 ) {
return compareImaginaryVal(o.imaginary, this.imaginary);
} else {
return realCompValue;
}
} else if (o.real instanceof BigDecimal && this.real instanceof BigDecimal) {
int realCompValue = ((BigDecimal)(o.real)).compareTo((BigDecimal)(this.real));
if (realCompValue == 0 ) {
return compareImaginaryVal(o.imaginary, this.imaginary);
} else {
return realCompValue;
}
}
// After checking all the Number extended class...
else {
// Throw exception.
}
}
private int compareImaginaryVal(Number imaginary2, U imaginary3) {
// TODO Auto-generated method stub
return 0;
}