2012-12-09 13 views
5

Gibt es einen guten Grund, Parameter zu verwenden, die Felder schattieren? Was ist der Unterschied zwischen diesen beiden:Gibt es einen guten Grund, Parameter zu verwenden, die Felder schattieren?

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

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

und

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

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

Und was ist, wenn Sie die this Schlüsselwort ohne Parameter verwenden, die in diesem Beispiel Schattenfelder (Ich vermute, es ist einfach nicht notwendig):

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

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

Antwort

5

Ich denke, es ist ein Stil Problem ist, sondern vor allem für den öffentlichen Bereichen - Point(int x,int y)Selbst selbst dokumentiert ist, während Point(int a, int b) nicht

+2

Und selbst wenn die Felder nicht öffentlich sind, werden sie oft durch die öffentliche API der Klasse (Getter, Setter, Methoden) oder einen Teil des Zustands des Objekts, wie in der Klasse Javadoc beschrieben, offengelegt. Die Verwendung konsistenter Namen hilft wirklich. –

2

im zweiten Fall ist es offensichtlich, dass x und y einen Zweck haben, an zwei Orten gespeichert though. Wenn Sie sehen a, b, x und y ist es nicht offensichtlich, was die Beziehung zwischen ihnen ist.

0

Der Unterschied Lesbarkeit ist und was für eine IDE wird Ihnen zeigen.

IMO-Parameter sollten so beschreibend wie möglich benannt werden, damit die IDE und Javadocs so kommunikativ und aussagekräftig wie möglich sind.

0

Es gibt auch ein Problem schwerer zu erkennen Bugs.

die Verwendung von x anstelle von this.x in einem Konstruktor ist eine potentielle Fehlerquelle.

Verwandte Themen