java—当类只得到最终字段时,如何在类的构造函数中使用only if else?

vjhs03f7  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(331)

我为给定的类编写了以下构造函数

public Gerade(Punkt punkt1, Punkt punkt2) {

        if (!punkt1.equals(punkt2)) {
            if (punkt1.getX().equals(punkt1.getX().min(punkt2.getX()))) {
                this.p1 = punkt1;
                this.p2 = punkt2;
            } else if (punkt2.getX().equals(punkt1.getX().min(punkt2.getX()))) {
                this.p1 = punkt2;
                this.p2 = punkt1;
            } else if (punkt1.getX().equals(punkt2.getX())) {
                if (punkt1.getY().equals(punkt1.getY().min(punkt2.getY()))) {
                    this.p1 = punkt1;
                    this.p2 = punkt2;
                } else if (punkt2.getY().equals(punkt1.getY().min(punkt2.getY()))) {
                    this.p1 = punkt2;
                    this.p2 = punkt1;
                }
            }
            } else {
            System.out.println("Punkte are identical!");
            this.p1 = null;
            this.p2 = null;
        }

}

以及以下两个最终字段:

private final Punkt p1;
private final Punkt p2;

不管代码实际在做什么:问题是,我得到了一个编译错误,因为如果出于任何原因,传递的两个变量punkt1和punkt2碰巧与构造函数中的if-else不兼容,那么最终的字段可能不会被初始化(我觉得很奇怪,因为else这个例子应该解释所有可能发生的事情,不是吗?)
问题是,因为它们必须是最终的,所以我也不能在if-else构造之前或之后在外部将“标准案例”写入构造函数,因为if-else构造不能再次设置字段(if-standard case before),或者它们可能已经被if-else构造设置,因此之后无法再次初始化(如果后面是标准case)。
我也不能使用任何设置器,因为字段是最终的。最后但同样重要的是,我不应该实现任何其他构造函数。
有什么办法可以绕过这个,可能吗?任何帮助都将不胜感激!

nzrxty8p

nzrxty8p1#

可以不初始化字段。你必须处理所有案件:

public Gerade(Punkt punkt1, Punkt punkt2) {

    if (!punkt1.equals(punkt2)) {
      if (punkt1.getX().equals(punkt1.getX().min(punkt2.getX()))) {
        this.p1 = punkt1;
        this.p2 = punkt2;
      } else if (punkt2.getX().equals(punkt1.getX().min(punkt2.getX()))) {
        this.p1 = punkt2;
        this.p2 = punkt1;
      } else if (punkt1.getX().equals(punkt2.getX())) {
        if (punkt1.getY().equals(punkt1.getY().min(punkt2.getY()))) {
          this.p1 = punkt1;
          this.p2 = punkt2;
        } else if (punkt2.getY().equals(punkt1.getY().min(punkt2.getY()))) {
          this.p1 = punkt2;
          this.p2 = punkt1;
        } else {
          //here
          p1 = null;
          p2 = null;
        }
      } else {
        //here
        p1 = null;
        p2 = null;
      }
    } else {
      System.out.println("Punkte are identical!");
      this.p1 = null;
      this.p2 = null;
    }
  }

但这么多的if语句不是个好主意。

相关问题