2011-08-12 35 views
11

Thực tiễn tốt nhất trong việc triển khai/cung cấp getters/setters cho một lớp có chứa bản đồ là gì?Getters/setters của một lớp học có bản đồ

Việc thực hiện phổ biến nhất tôi thấy là:

public class MyClass { 

    private Map<String, String> myMap; 
    public getMyMap() { /* Return an unmodifiable map */ } 
    public setMyMap(Map<String, String> myMap) { ... } 
} 

Hoặc nó sẽ là tốt hơn để cung cấp một giao diện như:

public getMyMap() { /* Return a modifiable map */ } 
public addToMap(String key, String value) { myMap.put(key, value); } 

Và tại sao phương pháp này tốt hơn?

+0

Tôi sẽ luôn cố gắng sử dụng tùy chọn thứ hai nếu có thể, nhưng bạn phải tiết lộ javabean getters/setters đôi khi bạn không có lựa chọn nào khác. – sMoZely

+7

Chỉ phụ thuộc vào bất cứ điều gì bản đồ đại diện (do đó, các yêu cầu chức năng). Điều này thường được ghi lại trên lớp và/hoặc phương pháp. Không có câu trả lời thực sự cho điều này. – BalusC

Trả lời

9

Cả hai đều có mục đích sử dụng. Các phương pháp được hiển thị bởi một lớp phải có mức trừu tượng thích hợp. Ví dụ, nếu lớp là một registry của chó được hỗ trợ bởi một Map<String, Dog>, sau đó nó có thể cung cấp các phương pháp như:

void addDog(String name, Dog dog); 
Dog findByName(String name); 

Nếu đó là nói một động cơ quy tắc cho phép khách hàng để xác định toàn bộ quy tắc thiết lập trong một cuộc gọi, sau đó nó có thể phơi bày các phương pháp như:

void setRules(Map<String, Rule> rules); 
Map<String, Rule> getRules(); 
-4

Tôi sẽ chỉ cung cấp một. Một cái gì đó giống như ...

public Map<String,String> getMyMap() 
{ 
    return myMap; 
} 

và khi bạn muốn sử dụng nó sau đó

myClass.getMyMap().put(key,value); 

DISCLAIMER: Tôi không biên dịch này và kiểm tra câu trả lời này;)

3

Nói chung tôi sẽ nói thử không trả lại bản đồ. Có phương thức lấy khóa và trả về giá trị. Lấy một bản đồ là ok, miễn là bạn sao chép nó, nhưng một phương pháp lấy chìa khóa/giá trị và đặt nó vào bản đồ sẽ là sở thích của tôi.

Nếu bạn phải trả lại bản đồ, bạn phải trả về phiên bản chỉ đọc hoặc một bản sao của nó. Phương thức thiết lập cũng nên sao chép bản đồ. Đó là một ý tưởng tồi để cho phép người gọi đột biến dữ liệu bên trong một lớp mà không có lớp biết, truyền hoặc giữ dữ liệu có thể thay đổi là một ý tưởng tồi.

1

Nó hoàn toàn phụ thuộc vào yêu cầu của bạn. Điều này có thể đủ trong hầu hết các trường hợp. Bạn thậm chí có thể không có phương thức getter trả về bản đồ. Nếu bạn sử dụng trình cắm thêm của tôi, nó có thể giúp bạn tạo các phương thức đó: http://fast-code.sourceforge.net/documentation.htm#create-list-map vì nhật thực sẽ không giúp bạn tạo phương thức thêm.

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