我想问一下,如果我想将它们用作加法和乘法的中性元素,我可以如何初始化最终字段ONE和ZERO
他们必须是美好的
public class ComplexNumber {
/**Constant for multiplication. Value 1*/
//public final ComplexNumber ONE;
/**Constant for addition. Value 0 */
//public final ComplexNumber ZERO;
/**The real value of ComplexNumber! FINAL*/
private final double a;
/**The imaginary value of ComplexNumber! FINAL*/
private final double b;
/**
* This Constructor initializes real and imaginary values of ComplexNumber
* @param a double real value
* @param b double imaginary value
*/
ComplexNumber(double a, double b) {
this.a = a;
this.b = b;
//this.ONE = new ComplexNumber(1,0); //TODO ask
// this.ZERO = new ComplexNumber(0);
}
/**
* This Constructor initializes imaginary value of CompexNumber
* @param b double imaginary value
*/
ComplexNumber(double b){
this.a = 0;
this.b = b;
//this.ONE = new ComplexNumber(1,0); //TODO ask
// this.ZERO = new ComplexNumber(0);
}
谢谢!
答案 0 :(得分:6)
如果你想从它们中制作常量,请像这样声明并初始化它们:
public static final ComplexNumber ONE = new ComplexNumber(1, 0);
public static final ComplexNumber ZERO = new ComplexNumber(0, 0);
static
表示该字段是特定于类的,而不是特定于实例的。 final
表示无法重新分配参考。对于一个实常数,实例也必须是不可变的,我认为你的代码正在执行,因为a
和b
无法从你的类外部访问。
答案 1 :(得分:0)
只有constructor
是在Java中初始化final
变量的方法。
因为A final只能在其生命周期中初始化一次,所以无法再次重新初始化它。
因此,使用参数调用构造函数是初始化的最佳方法。
答案 2 :(得分:0)
public class ComplexNumber {
final double realPart;
final double imgPart;
public static final ComplexNumber REAL_ONE = new ComplexNumber(1, 0);
public static final ComplexNumber ZERO = new ComplexNumber(0, 0);
public ComplexNumber(double realPart, double imgPart) {
this.realPart = realPart;
this.imgPart = imgPart;
}
public ComplexNumber(double imgPart) {
this(0, imgPart);
}
}
为了使您的代码可读,您可以将字段名称重命名为real和img part 并使用构造函数链接,以便您可以重用现有的构造函数。
修改强>
public class ComplexNumber {
final double realPart;
final double imgPart;
public static final ComplexNumber REAL_ONE = new ComplexNumber(1, 0);
public static final ComplexNumber ZERO = new ComplexNumber(0, 0);
public ComplexNumber(double realPart, double imgPart) {
this.realPart = realPart;
this.imgPart = imgPart;
}
public static ComplexNumber createRealComplexNumber(double realPart) {
return new ComplexNumber(realPart, 0.0);
}
public static ComplexNumber createImgComplexNumber(double imgPart) {
return new ComplexNumber(0.0, imgPart);
}
}
如果您想创建仅包含实部的复数,您将无法重载只有实部的构造函数,因为已经使用了相同的签名。您可以使用此方法