代码之家  ›  专栏  ›  技术社区  ›  Frostbiyt

为什么我不能将“this”设置为构造函数中的对象?[重复]

  •  -1
  • Frostbiyt  · 技术社区  · 3 年前

    我在一个对象类中有一个构造函数,它将输入值传递给一个函数,该函数返回一个相同类型的对象,我想知道为什么不能在一行中设置新对象的所有实例变量,如下所示: 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);
        }
    

    因为我的对象只有两个实例变量,所以单独设置每个实例变量并不是什么大问题,但对于更复杂的对象来说,这似乎真的很不方便。有没有其他方法比我目前的解决方案更干净?

    1 回复  |  直到 3 年前
        1
  •  1
  •   OneCricketeer Gabriele Mariotti    3 年前

    你根本不能尊重一个实例本身。

    假设reduce函数不是公共静态方法,为什么不让它自己分配本地实例变量呢?

    如果它是一个公共静态方法,您只需要这样做

    Fraction f = Fraction.reduceFraction(numIn, denIn); 而不是 Fraction f = new Fraction(numIn, denIn)

    在reduce方法中,我想你已经做到了 return new Fraction(numIn, denIn) ? 如果是这样的话,我想你会有一个递归构造函数循环