为什么我不能在构造函数中将 "this" 设置为等于一个对象?
Why can't I set "this" equal to an object in a constructor?
我在一个对象 class 中有一个构造函数,它将其输入值传递给一个函数,该函数 returns 一个相同类型的对象,我想知道为什么我不能设置所有实例一行中新对象的变量,如下所示:this = function();
这是我当前的解决方案:
public class Fraction {
long num;
long den;
public Fraction(double numIn, double denIn){
Fraction temp = reduceFraction(numIn, denIn);
num = temp.num;
den = temp.den;
}
我也可以这样做:
public Fraction(double numIn, double denIn){
Fraction temp = reduceFraction(numIn, denIn);
this.num = temp.num;
this.den = temp.den;
}
像这样的东西会更干净,但不起作用:
public Fraction(double numIn, double denIn){
this = reduceFraction(numIn, denIn);
}
由于我的对象只有两个实例变量,因此单独设置每个实例变量并没有什么大不了的,但对于更复杂的对象来说,这似乎真的很不方便。有没有其他方法可以比我当前的解决方案更干净?
您根本无法在其自身内引用实例。
假设它不是 public 静态方法,为什么不让 reduce 函数自己分配局部实例变量?
如果它是一个 public 静态方法,你会做
Fraction f = Fraction.reduceFraction(numIn, denIn);
而不是 Fraction f = new Fraction(numIn, denIn)
在 reduce 方法中,我假设你已经完成了 return new Fraction(numIn, denIn)
?如果是这样,我想你会有一个递归构造函数循环
我在一个对象 class 中有一个构造函数,它将其输入值传递给一个函数,该函数 returns 一个相同类型的对象,我想知道为什么我不能设置所有实例一行中新对象的变量,如下所示:this = function();
这是我当前的解决方案:
public class Fraction {
long num;
long den;
public Fraction(double numIn, double denIn){
Fraction temp = reduceFraction(numIn, denIn);
num = temp.num;
den = temp.den;
}
我也可以这样做:
public Fraction(double numIn, double denIn){
Fraction temp = reduceFraction(numIn, denIn);
this.num = temp.num;
this.den = temp.den;
}
像这样的东西会更干净,但不起作用:
public Fraction(double numIn, double denIn){
this = reduceFraction(numIn, denIn);
}
由于我的对象只有两个实例变量,因此单独设置每个实例变量并没有什么大不了的,但对于更复杂的对象来说,这似乎真的很不方便。有没有其他方法可以比我当前的解决方案更干净?
您根本无法在其自身内引用实例。
假设它不是 public 静态方法,为什么不让 reduce 函数自己分配局部实例变量?
如果它是一个 public 静态方法,你会做
Fraction f = Fraction.reduceFraction(numIn, denIn);
而不是 Fraction f = new Fraction(numIn, denIn)
在 reduce 方法中,我假设你已经完成了 return new Fraction(numIn, denIn)
?如果是这样,我想你会有一个递归构造函数循环