2012-12-09 10 views
5

Czy istnieje dobry powód, aby używać parametrów, które zacieniają pola? Jaka jest różnica między tymi dwoma:Czy istnieje dobry powód do używania parametrów, które zacieniają pola?

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

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

i

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

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

A co jeśli używasz słowa kluczowego this bez parametrów pola cienia w tym przykładzie (zgaduję, że to tylko niepotrzebny):

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

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

Odpowiedz

5

myślę, że jest to kwestia stylu, ale przede wszystkim na obszarach publicznych - Point(int x,int y) jest siebie dokumentujące się, natomiast Point(int a, int b) nie

+2

Nawet jeśli pola nie są publiczne, często są one udostępniane przez publiczny interfejs API tej klasy (metody pobierające, ustawiające, metody) lub część stanu obiektu, jak opisano w klasie javadoc. Używanie spójnych nazw naprawdę pomaga. –

2

w drugim przypadku, jest oczywiste, że x i y mają jeden cel, choć przechowywane w dwóch miejscach. Jeśli widzisz a, b, i y, nie jest oczywiste, jaki jest związek między nimi.

0

Różnica jest czytelność i jakie IDE pokaże.

Parametry IMO należy nazwać możliwie jak najbardziej opisowo, aby IDE i Javadocs były jak najbardziej komunikatywne i ekspresyjne.

0

Istnieje również problem z trudniejszymi do wykrycia błędami.

używanie x zamiast this.x w konstruktorze jest potencjalnym źródłem błędów.