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

如何整洁地调用超级结构

  •  2
  • pgsandstrom  · 技术社区  · 15 年前

    我的代码是:

    public MyClass (int y) {
        super(y,x,x);
        //some code
    }
    

    我的问题是,在这种情况下,我希望生成一个“x”并发送给超级构造函数。但是,对超级结构的调用必须是该构造函数中的第一行。当然,我可以这样做:

    int x;
    {
        x = generateX();
    }
    

    但这感觉很难看,然后代码将运行,不管我使用什么构造函数,这感觉不太好。现在我考虑将整个对象封装在另一个只计算x的对象中,然后启动这个对象。这是最好的方法吗?

    3 回复  |  直到 15 年前
        1
  •  12
  •   Jon Skeet    15 年前

    怎么样:

    public MyClass(int y) {
      this(y, generateX());
      //some code
    }
    
    private MyClass(int y, int x) {
      super(y, x, x);
      //some code
    }
    
    private static int generateX() {
      return 10;
    }
    

    如果你很高兴 generateX 要被调用两次,您不需要额外的构造函数-这里只允许对两个超类构造函数参数使用相同的值。

        2
  •  2
  •   Poindexter    15 年前

    怎么样 super(y, generateX(), generateX())

        3
  •  0
  •   David Soroko    15 年前

    builder pattern 也可能与此相关。对于给定的示例来说有点重,但是如果需要进一步设置 MyClass 应该考虑。