2013-03-03 22 views
9

Nếu bạn có một lớp lồng nhau tĩnh riêng trong Java, bạn có nên sử dụng getters và setters thay vì truy cập trường trực tiếp không?Có được khuyến khích đóng gói cho các lớp bên trong tĩnh tư nhân không?

Ví dụ. truy cập lĩnh vực trực tiếp:

public class Application { 
    private List<MyInnerClass> myInnerClassList; 

    // ... 

    public void foo() { 
     MyInnerClass inner = new MyInnerClass(); 
     inner.bar = 50; 
     myInnerClassList.add(inner); 
    } 

    private static class MyInnerClass { 
     private int bar; 
    } 
} 

vs đóng gói:

public class Application { 
    private List<MyInnerClass> myInnerClassList; 

    // ... 

    public void foo() { 
     MyInnerClass inner = new MyInnerClass(); 
     inner.setBar(50); 
     myInnerClassList.add(inner); 
    } 

    private static class MyInnerClass { 
     private int bar; 

     public int getBar() { 
      return bar; 
     } 

     public void setBar(int bar) { 
      this.bar = bar; 
     } 
    } 
} 
+0

Đóng gói thường là một điều tốt, giữ cho các lớp độc lập với nhau (ví dụ: bạn có thể muốn thay đổi cách bạn gán 'thanh'). Nhưng cũng phụ thuộc vào những gì bạn muốn làm với 'MyInnerClass'. – m0skit0

+1

nếu không ai khác được truy cập vào lớp bên trong đó hơn lớp bên ngoài chứa nó, nó tương đối dễ dàng để tái cấu trúc nó nếu nhu cầu phát sinh để sử dụng getters và setters. vì vậy tôi sẽ chỉ sử dụng một biến đơn giản. –

Trả lời

2

Phụ thuộc nhưng nói chung tôi nghĩ là không sao. Một trong những lý do chính để sử dụng getters và setters là ẩn chi tiết triển khai từ người dùng của lớp để bạn có thể dễ dàng thay đổi triển khai mà không ảnh hưởng đến người dùng.

Trong trường hợp của một lớp bên trong riêng, đây không phải là vấn đề vì bạn vừa là người viết và người dùng của lớp, và không ai từ bên ngoài có thể sử dụng nó.

Nếu bạn chỉ sử dụng để giữ một số dữ liệu với nhau, không có getters và setters sẽ làm cho mã ngắn hơn và dễ đọc hơn.

Nhưng nếu lớp bên trong lớn hơn và phức tạp hơn (thường không phải là trường hợp), thì bạn nên cân nhắc sử dụng getters/setters. Điều này sẽ cho phép bạn, ví dụ: để thêm giới hạn kiểm tra vào bar trong mã của bạn.

0

Chúng tôi đề nghị, bởi vì tại một số điểm nó có thể làm cho tinh thần để cấu trúc lại và di chuyển các lớp bên ngoài. Ngoài ra, nó có thể được mong muốn để làm cho một giao diện cho nó, và như vậy. Có lẽ có nhiều lý do nữa.

+4

Tại thời điểm bạn di chuyển nó, bạn có thể thêm getters và setters. – Eric

0

Mỗi hướng dẫn Java: "Lớp lồng nhau tĩnh tương tác với các thành viên thể hiện của lớp ngoài của nó (và các lớp khác) giống như bất kỳ lớp cấp cao nhất nào. Trong thực tế, lớp lồng nhau tĩnh là hành vi cấp cao nhất lớp đã được lồng trong một lớp cấp cao nhất để tiện lợi đóng gói. "

Vì vậy, tôi muốn nói có, bạn thường muốn đóng gói các thành viên giống như bạn muốn cho một lớp học cấp cao nhất.

+2

Điểm quan trọng ở đây là lớp học là riêng tư, vì vậy không nên được coi là lớp học hàng đầu. – Eric

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