2014-10-22 21 views
6

Có nghĩa là gì đối với một bộ sưu tập được khai báo cuối cùng trong Java? Có phải là không có thêm yếu tố nào có thể được thêm vào nó? Có phải rằng các yếu tố đã có không thể thay đổi? Có cái gì khác?Có nghĩa là gì đối với bộ sưu tập là cuối cùng trong Java?

+2

Nó có nghĩa rằng đó là tài liệu tham khảo (danh sách của nó) không thể thay đổi – MadProgrammer

+0

Xem thêm: [ý nghĩa của ArrayList cuối cùng là gì?] (http://stackoverflow.com/q/10750791/697449), [Khai báo một trường List với từ khóa cuối cùng] (http://stackoverflow.com/q/13079365/697449), [Java final modifier] (http://stackoverflow.com/q/4012167/697449) –

Trả lời

7

No. Nó chỉ đơn giản có nghĩa là không thể thay đổi tham chiếu.

final List list = new LinkedList(); 

.... 
list.add(someObject); //okay 
list.remove(someObject); //okay 
list = new LinkedList(); //not okay 
list = refToSomeOtherList; //not okay 
3

Bạn đang bối rối giữa thứcbất biến Objects.

final -> Bạn không thể thay đổi tham chiếu thành bộ sưu tập (Đối tượng). Bạn có thể sửa đổi bộ sưu tập/Đối tượng các điểm tham chiếu đến. Bạn vẫn có thể thêm các yếu tố vào bộ sưu tập

immutable -> Bạn không thể sửa đổi nội dung của Bộ sưu tập/Đối tượng tham chiếu. Bạn không thể thêm các phần tử vào bộ sưu tập.

1

Bạn không thể làm điều này, tham chiếu là FINAL

final ArrayList<Integer> list = new ArrayList<Integer>(); 
    ArrayList<Integer> list2 = new ArrayList<Integer>(); 
    list=list2;//ERROR 
    list = new ArrayList<Integer>();//ERROR 

JLS 4.12.4

Khi một biến thức đã được chỉ định, nó luôn luôn chứa cùng giá trị . Nếu biến cuối cùng giữ tham chiếu đến một đối tượng, thì trạng thái của đối tượng có thể bị thay đổi bởi các thao tác trên đối tượng, nhưng biến sẽ luôn tham chiếu đến cùng một đối tượng.

1

Làm cho biến cuối cùng đảm bảo bạn không thể chỉ định tham chiếu đối tượng đó sau khi được chỉ định. f bạn kết hợp các từ khóa cuối cùng với việc sử dụng các Collections.unmodifiableList, bạn ge behavi

final List fixedList = Collections.unmodifiableList(someList); 

này đã là kết quả rằng danh sách được trỏ đến bởi fixedList không thể thay đổi. nó vẫn có thể được thay đổi thông qua các tài liệu tham khảo someList (do đó hãy chắc chắn rằng nó nằm ngoài phạm vi sau asignment này.)

Nhiều ví dụ đơn giản là tham gia một lớp cầu vồng thêm màu sắc của cầu vồng trong một HashSet

public static class Rainbow { 
    /** The valid colors of the rainbow. */ 
    public static final Set VALID_COLORS; 

    static { 
     Set temp = new HashSet(); 
     temp.add(Color.red); 
     temp.add(Color.orange); 
     temp.add(Color.yellow); 
     temp.add(Color.green); 
     temp.add(Color.blue); 
     temp.add(Color.decode("#4B0082")); // indigo 
     temp.add(Color.decode("#8A2BE2")); // violet 
     VALID_COLORS = Collections.unmodifiableSet(temp); 
    } 

    /** 
    * Some demo method. 
    */ 
    public static final void someMethod() { 
     Set colors = RainbowBetter.VALID_COLORS; 
     colors.add(Color.black); // <= exception here 
     System.out.println(colors); 
    } 
    } 
} 
Các vấn đề liên quan