2011-10-17 44 views
11

Sự khác nhau giữa hai loại đó là gì. Tại sao sau này tạo ra một lớp serializable mới?Sự khác biệt giữa ArrayList <>() và ArrayList <>() {}

new ArrayList<Clazz>() 

tạo ra một mới có sản phẩm nào ArrayList

new ArrayList<Clazz>(){} 

Eclipse cho thấy: The serializable class does not declare a static final serialVersionUID field of type long

Trả lời

13

Trong ví dụ đầu tiên, bạn đang tạo ra một thể hiện ArrayList. Trong ví dụ sau, bạn đang tạo một cá thể của một phân lớp ẩn danh là ArrayList. Thông thường, bạn sẽ ghi đè lên một hoặc nhiều phương thức trong lớp con, nếu không thì không có nhiều điểm trong việc tạo ra như vậy. Như John Skeet chỉ ra, có một lý do hacky để tạo một phân lớp ẩn danh của một kiểu chung, xem his answer.

Eclipse cảnh báo rằng, để tuân thủ các Serializable thông số kỹ thuật (ArrayListSerializable, vì vậy tất cả các lớp con của nó quá), bạn nên xác định một độc đáo serialVersionUID trong subclass từ đó quá trình deserialization có thể đảm bảo rằng các định nghĩa lớp đã không thay đổi đáng kể kể từ khi nó được tuần tự hóa (đáng kể == bản thân bạn đã quyết định rằng định nghĩa mới không tương thích với định nghĩa cũ, vì vậy bạn có thể diễn tả sự thật bằng cách thay đổi serialVersionUID). Nếu bạn không bao giờ sắp xếp theo thứ tự danh sách thì cảnh báo không quan trọng.

+2

Anonymous subclass. Tại sao tôi bị mù ... –

7

Như Joonas nói, trong ví dụ thứ hai bạn đang tạo một lớp bên trong vô danh. Tuy nhiên, có một lý do để làm điều này ngay cả khi bạn không ghi đè bất kỳ phương pháp nào vv: nó cho phép bạn xác định loại phần tử của ArrayList tại thời gian thực hiện - vì siêu lớp của lớp bên trong ẩn danh là ArrayList<Clazz> thay vì chỉ ArrayList.

Đây là cách loại chữ làm việc trong Guice. Đó là một chút của một hack xấu xí, nhưng nó được công việc làm ...

+0

Làm thế nào nó cho phép anh ta xác định loại phần tử khi chạy? –

+1

@LouisRhys: Nếu bạn gọi 'getClass()' trên cá thể, nó sẽ cung cấp cho lớp ẩn danh. Nếu sau đó bạn gọi 'getGenericSuperclass()' mà 'Type' sẽ có thông tin thích hợp. –

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