【问题标题】:Is there a good reason to use parameters that shadow fields?是否有充分的理由使用阴影字段的参数?
【发布时间】:2012-12-09 00:16:14
【问题描述】:

是否有充分的理由使用阴影字段的参数?这两者有什么区别:

public class Point {
    public int x = 0;
    public int y = 0;

    //constructor
    public Point(int a, int b) {
        x = a;
        y = b;
    }
}

public class Point {
    public int x = 0;
    public int y = 0;

    //constructor
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

如果您使用 this 关键字而不使用此示例中隐藏字段的参数会怎样(我猜这只是不必要的):

public class Point {
    public int x = 0;
    public int y = 0;

    //constructor
    public Point(int a, int b) {
        this.x = a;
        this.y = b;
    }
}

【问题讨论】:

    标签: java parameters field shadow


    【解决方案1】:

    我认为这是一个风格问题,尤其是对于公共领域 - Point(int x,int y)自我记录自己,而 Point(int a, int b) 不是

    【讨论】:

    • 而且即使字段不是公共的,它们也经常被类的公共 API(getter、setter、方法)公开,或者类中描述的对象的部分状态文档。使用一致的名称确实很有帮助。
    【解决方案2】:

    在第二种情况下,很明显xy 有一个目的,尽管存储在两个地方。如果您看到abxy,则不清楚它们之间的关系是什么。

    【讨论】:

      【解决方案3】:

      区别在于可读性和 IDE 将向您展示的内容。

      IMO 参数的命名应尽可能具有描述性,以便 IDE 和 Javadocs 尽可能具有交流性和表达性。

      【讨论】:

        【解决方案4】:

        还有一个更难检测的问题。

        在构造函数中使用 x 而不是 this.x 是潜在的错误来源。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-30
          • 2013-02-07
          • 2013-06-04
          • 2010-10-18
          • 2010-09-16
          • 1970-01-01
          • 2023-03-27
          • 2018-02-11
          相关资源
          最近更新 更多