2013-01-22 42 views
9

Tôi đang cố gắng sắp xếp một danh sách các danh sách một số đối tượng (của một lớp tùy chỉnh: List>), sử dụng Kryo.serialization danh sách kryo

list2D; // List<List<MyClass>> which is already produced. 

Kryo k1 = new Kryo(); 
Output output = new Output(new FileOutputStream("filename.ser")); 
k1.writeObject(output, (List<List<Myclass>>) list2D); 
output.close(); 

Cho đến giờ, không có vấn đề gì, nó viết ra danh sách không có lỗi. Nhưng khi tôi cố gắng đọc nó:

Kryo k2 = new Kryo(); 
Input listRead = new Input(new FileInputStream("filename.ser")); 
List<List<Myclass>> my2DList = (List<List<Myclass>>) k2.readObject(listRead, List.class); 

tôi nhận được lỗi này:

Exception in thread "main" com.esotericsoftware.kryo.KryoException: Class cannot be created (missing no-arg constructor): java.util.List 

Làm thế nào tôi có thể giải quyết vấn đề này?

+0

Bạn đã giải quyết được sự cố này chưa? – expert

Trả lời

3

Theo lỗi của bạn, bạn có thể muốn thêm một constructor không có arg đến lớp học của bạn:

public class MyClass { 

    public MyClass() { // no-arg constructor 

    } 

    //Rest of your class.. 

} 
+0

Cảm ơn câu trả lời của bạn. Nhưng MyClass đã có một hàm tạo cần một đối số String. Bất kỳ ý tưởng? – MAZDAK

+0

Thêm hàm tạo zero arg hoặc viết trình nối tiếp của riêng bạn để tạo đối tượng. Bạn có thể mở rộng FieldSerializer và ghi đè tạo. – NateS

5

Bạn không thể sử dụng List.class khi đọc các đối tượng trở lại, kể từ List là một giao diện.

k2.readObject(listRead, ArrayList.class); 
+0

Bạn nói đúng. Và chúng ta không cần phải đúc. Tức là: 'Danh sách dữ liệu = kryo.readObject (đầu vào, ArrayList.class);' –

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