2011-07-21 26 views
8

Tôi chỉ nhận thấy rằng ImmutableList.of(E[]) không còn được dùng vì lợi ích của ImmutableList.copyOf(), vì lý do rõ ràng rằng danh sách này không thể thực hiện bất biến nếu mảng thô được sử dụng ở nơi khác. Điều gì sẽ xảy ra nếu bạn có phương thức trả về mảng và bạn biết thực tế là phương thức không giữ tham chiếu đến mảng và mã của bạn không giữ tham chiếu đến mảng khác chuyển nó đến ImmutableList.of()?ổi: thực hành tốt nhất với ImmutableList.of (E [])

Tôi có nên ...

  • tiếp tục sử dụng ImmutableList.of(E[]) (có vẻ như một ý tưởng tồi vì phương pháp này sẽ biến mất)
  • sử dụng Collections.unmodifiableList(Arrays.asList())
  • sử dụng ImmutableList.copyOf() - điều này có vẻ như ý tưởng tốt nhất nơi các vấn đề về hiệu suất/tài nguyên không phát sinh, nếu không bản sao là không cần thiết.

Trả lời

16

ImmutableList.of(E[]) không và chưa bao giờ lưu trữ mảng được cung cấp trực tiếp (nó sẽ không thay đổi nếu nó đã làm, điều này sẽ đánh bại điểm của lớp). Nó không được chấp nhận vì lý do đặt tên. Nếu bạn xem triển khai, đó là:

public static <E> ImmutableList<E> of(E[] elements) { 
    return copyOf(elements); 
} 

Vì vậy, lời khuyên của tôi sẽ chỉ sử dụng ImmutableList.copyOf() nói chung. Nếu bạn biết bạn đang chỉ gói một mảng để sử dụng nội bộ hoặc một số như vậy, hãy tự mình lưu bản sao và chỉ sử dụng Arrays.asList nhưng tôi muốn thích ImmutableList cho API.

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