2013-07-15 35 views
6

Ngay bây giờ tôi đang tạo một tải trọng của các lớp học sẽ giữ cấu hình của tôi và đó là nó. Tất cả những gì tôi làm là lưu trữ các giá trị từ tệp cấu hình.Getters cho biến cuối cùng

Hơn một nửa mã là getters và tôi tự hỏi liệu thực hành vẫn còn để có các getters hoặc chỉ truy cập các biến trực tiếp.

Vì vậy, đây:

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

    final String name; 

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

Hoặc:

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

    public final String name; 
} 

Có vẻ như thực sự ngớ ngẩn để có tất cả các thu khí ở đó khi họ không thực sự làm bất cứ điều gì nhưng trả lại biến. Nhưng tôi đã được thông báo rằng đó là thực hành Java phổ biến để có getter trong đó anyways.

+1

Trình biên dịch sẽ in nội dòng chúng. Mặc dù tôi sẽ sử dụng 'java.util.Properties' cho những gì bạn đang làm. – jlordo

+2

Với các biến cuối cùng, nó có thể trông ngớ ngẩn, nhưng nếu bạn có biến không phải là cuối cùng và phân lớp có cùng tên biến được xác định, và bạn cố gắng truy cập vào các biến này, thì bạn sẽ thấy nhầm lẫn như thế nào. Đóng gói đúng cách luôn là cách thực hành tốt nhất. – kosa

+0

@jlordo đó là một ví dụ rất đơn giản mà tôi đã đưa ra. 'Properties' hoàn toàn không phù hợp với những gì tôi đang làm :) – Cheetah

Trả lời

11

Encapsulating dữ liệu với thu khí có thể cung cấp một số lợi thế, bao gồm:

  • Bạn có thể thay đổi lĩnh vực này đối với một số đại diện khác, mà không ảnh hưởng người gọi.
  • Bạn có thể thêm mã bổ sung trong bộ nạp.
  • Bạn có thể triển khai giao diện cung cấp getters.
  • Bạn có thể cung cấp quyền truy cập chỉ đọc vào các trường ngay cả khi chúng không phải là final.
+1

Lý do quan trọng nhất để làm điều này là cho [coupling] (http://en.wikipedia.org/wiki/Coupling_%28computer_programming%29) mà bạn đã giải thích trong câu trả lời của bạn. –

+0

@LuiggiMendoza Bạn có thể giải thích thêm về liên kết liên quan đến getters/setters không? –

+2

Có nhiều cặp mã hơn để biểu diễn của lớp làm cho nó hoạt động nhiều hơn để thay đổi biểu diễn đó. Việc đóng gói ẩn biểu diễn bên trong phía sau một giao diện, có thể vẫn không đổi khi các thay đổi biểu diễn. –

0

Việc thực hành Tôi biết là bạn có thể sử dụng công tĩnh lĩnh vực cuối cùng với bất biến loại, như System.out ví dụ. Tuy nhiên, tôi thêm getters vào trường mẫu.

Tôi đồng ý với bạn mặc dù hầu như không có tác hại phơi bày một số String cuối cùng. Tuy nhiên, hãy cẩn thận với các loại có thể thay đổi. Hơn nữa, kể từ khi có nội tuyến và tạo mã trong IDE, chi phí của các getters có xu hướng khá hơn, cả mã viết và thời gian chạy.

Các vấn đề liên quan