是否有充分的理由使用影子字段的参数?

时间:2012-12-09 00:16:14

标签: java parameters field shadow

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

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;
    }
}

4 个答案:

答案 0 :(得分:5)

我认为这是一个风格问题,但特别是对于公共字段 - Point(int x,int y)自我记录,而Point(int a, int b)不是

答案 1 :(得分:2)

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

答案 2 :(得分:0)

不同之处在于可读性以及IDE将向您展示的内容。

IMO参数应尽可能描述性地命名,以便IDE和Javadoc尽可能具有沟通性和表达性。

答案 3 :(得分:0)

还有一个难以发现错误的问题。

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