2013-07-15 9 views
6

Właśnie teraz tworzę ładunek klas, które utrzymają moją konfigurację i to jest to. Wszystko, co robię, to zapisywanie wartości z pliku konfiguracyjnego.Pobieranie dla zmiennych ostatecznych

Więcej niż połowa kodu to gettery i zastanawiam się, czy praktyka wciąż ma mieć gettery, czy po prostu uzyskać bezpośredni dostęp do zmiennych.

Więc tak:

public myClass 
{ 
    public myClass(String name) 
    { 
     this.name = name; 
    } 

    final String name; 

    public final String getName() 
    { 
     return name; 
    } 
} 

Lub:

public myClass 
{ 
    public myClass(String name) 
    { 
     this.name = name; 
    } 

    public final String name; 
} 

Wydaje się naprawdę głupio mieć wszystkie pobierające tam, kiedy nie są one rzeczywiście robi nic jednak zwrócić zmienną. Ale powiedziano mi, że powszechną praktyką Javy jest, że i tak zdobywca jest tam.

+1

Kompilator i tak je wbuduje. Chociaż używałbym 'java.util.Properties' dla tego, co robisz. – jlordo

+2

Z ostatnimi zmiennymi może wyglądać głupio, ale jeśli masz nieokreślone zmienne i podklasy mają zdefiniowaną tę samą nazwę zmiennej i spróbujesz uzyskać dostęp do tych zmiennych, zobaczysz, jak bardzo byłoby to pomieszane bez pobierania/ustawiania. Właściwa enkapsulacja to zawsze najlepsza praktyka. – kosa

+0

@jlordo to był BARDZO prosty przykład, który dawałem. "Właściwości" w żaden sposób nie nadają się do tego, co robię :) – Cheetah

Odpowiedz

11

enkapsulacji danych z pobierające może dostarczyć wiele korzyści, w tym:

  • Można zmienić pole do innej reprezentacji, bez wpływu rozmówców.
  • Możesz dodać dodatkowy kod do pobierającego.
  • Można zaimplementować interfejs, który udostępnia moduły pobierające.
  • Można udostępnić pola tylko do odczytu, nawet jeśli nie były to final.
+1

Najważniejszym powodem, aby to zrobić, jest [sprzężenie] (http://en.wikipedia.org/wiki/Coupling_%28computer_programming%29), które wyjaśniłeś w swojej odpowiedzi. –

+0

@LuiggiMendoza Czy mógłbyś dalej wyjaśnić powiązanie w odniesieniu do podmiotów pobierających/ustawiających? –

+2

Posiadanie większej liczby par do reprezentacji klasy sprawia, że ​​bardziej zależy na zmianie tej reprezentacji. Enkapsulacja ukrywa wewnętrzną reprezentację za interfejsem, która może pozostawać stała w miarę zmiany reprezentacji. –

0

Praktyka wiem, jest to, że można korzystać z publicznych statycznych końcowych pól z niezmiennych typów, jak System.out na przykład. Dodaję jednak gettery do pól instancji.

Zgadzam się z tobą, że szkoda nie ujawnia ostatecznego String. Uważaj jednak na typy zmienne. Ponadto, ponieważ w IDE wprowadzono inline i generowanie kodu, koszty modułów pobierających są raczej niewielkie, zarówno podczas pisania kodu, jak i podczas wykonywania.

Powiązane problemy