Lists.transform() trả về chế độ xem được chuyển đổi của danh sách gốc. Từ Lists.transform() javadoc:
Danh sách quay trở lại luôn luôn thực hiện Serializable, nhưng serialization sẽ chỉ thành công khi fromList và chức năng là serializable.
Khi tuần tự hóa chế độ xem đã chuyển đổi, bạn thực sự đang sắp xếp danh sách gốc cùng với hàm. Trong trường hợp của bạn, nó không thành công vì danh sách gốc của bạn không được tuần tự hóa (vì nó chứa các phần tử đồ thị không tuần tự hóa). Nhưng nó cũng có thể thất bại vì chức năng không thực hiện tuần tự.
BTW, có một mẹo nhỏ để tạo các hàm có thể tuần tự mà không có độ dài. Thay vì thực hiện:
private static final class MyFunction extends Function<String, String> implements Serializable {
private static final MyFunction INSTANCE = new MyFunction();
@Override
public String apply(String input) {
return "[" + input + "]";
}
private Object readResolve() {
return INSTANCE;
}
private static final long serialVersionUID = 1;
}
Bạn có thể sử dụng mô hình enum singleton, đó là rất nhiều ít tiết, và được bạn serialization cho miễn phí (vì enums là serializable). Nó cũng đảm bảo rằng Chức năng của bạn là một singleton:
// enum singleton pattern
private enum MyFunction implements Function<String, String> {
INSTANCE;
@Override
public String apply(String input) {
return "[" + input + "]";
}
}
Nguồn
2012-02-24 00:14:39
Bạn không có để tạo danh sách mới, hãy xem câu trả lời @eneveu. – Xaerxess
OP cho biết rằng fromList đặc biệt đầy đủ các phần tử không thể tuần tự hóa. –
@Xin bạn có thể sửa đổi nhận xét của mình không? Bạn không thể nhận được một danh sách serializable chỉ bằng cách sử dụng lừa enum (@eneveu trả lời). Câu trả lời này là hữu ích nhất liên quan đến câu hỏi. –