为什么我不能在构造函数中将 "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)?如果是这样,我想你会有一个递归构造函数循环