Tôi đã đọc nhiều bài viết về ArrayStoreExceptions, hầu hết trong số họ rơi vào một trong các loại:Làm thế nào tôi có thể khắc phục sự cố một ArrayStoreException
- hiểu lầm cơ bản (đặt một lớp cơ sở vào một tuyên bố mảng của lớp trẻ)
- hiểu lầm tương tự khi nhận được lỗi này chuyển đổi từ danh sách sang các mảng
- "hiệp biến" vấn đề mảng vs Generics
xung quanh mỏ không rơi vào bất kỳ các danh mục này. Có one other case, OP nghi ngờ một loại lỗi nào đó chỉ xuất hiện trên Unix. Tôi nghĩ rằng tôi đang có trường hợp đó và tôi không chắc chắn làm thế nào để có được gần gũi hơn với vấn đề này.
Tôi đã phá vỡ các mã xuống càng nhiều càng tốt, nó trông như thế này:
System.out.println("Declaring RecordValues array");
RecordValues[] rv = new RecordValues[3];
System.out.println("This array is meant for "+rv.getClass().getComponentType());
System.out.println("Adding user defaults which is: "+userdefaults.getClass().getName());
System.out.println("Its parent is: "+userdefaults.getClass().getSuperclass().getName());
rv[0] = userdefaults;
System.out.println("Adding templvalues which is: "+tmplvalues.getClass().getName());
rv[1] = tmplvalues;
System.out.println("Adding sessionvalues which is: "+tmplvalues.getClass().getName());
rv[2] = sessionvalues;
Và nó ra:
[ant:createwo] Declaring RecordValues array
[ant:createwo] This array is meant for class org.kp.mbe.arscli.datamap.RecordValues
[ant:createwo] Adding user defaults which is: org.kp.mbe.arscli.datamap.UserValues
[ant:createwo] Its parent is: org.kp.mbe.arscli.datamap.RecordValues
:createwo FAILED <--
...
Caused by: java.lang.ArrayStoreException: org.mbe.arscli.datamap.UserValues
UserValues là một tiểu loại RecordValues. Tôi đã tạo một số thử nghiệm đơn giản bằng cách sử dụng các lớp được đề cập nhưng không thể sao chép lỗi. Ngoài ra (đây là một phần thực sự kỳ lạ), điều này đã được làm việc trong hơn sáu tháng. Tôi đã thực hiện các thay đổi ở các phần khác của công cụ nhưng không có gì ở gần các thư viện này. Nó đột nhiên xuất hiện.
Tôi tự hỏi điều gì khác có thể gây ra ArrayStoreException. Tôi chắc chắn 100% rằng UserValues là một lớp con của RecordValues, ngay sau khi tôi cố gắng thêm nó vào mảng, nó không thành công. Host là 64bit RH linux, phiên bản java OpenJDK 1.7.0.45.
Tôi biết ArrayStoreException đang nói gì với tôi, câu hỏi của tôi là làm cách nào để tôi có thể thực hiện thêm bước này trong khắc phục sự cố? Nếu UserValues IS A RecordValues, tôi sẽ đi đâu từ đây ??
Nó có thể liên quan đến các trình tải lớp khác nhau và các phiên bản khác nhau của lớp không? Thử thêm một kiểm tra 'instanceof', ví dụ: 'if (userdefaults instanceof RecordValues) {/ * in ra một cái gì đó * /}' – Taylor
Ngoài ra, bạn chắc chắn về sự khởi tạo của 'RecordValues [] rv = new RecordValues [3];' là chính xác, và không được thực hiện gián tiếp? bởi instantiation tôi có nghĩa là những thứ sau khi '=') – Taylor
Bạn nhấn móng tay trên đầu, tôi cập nhật trong câu trả lời. – AndyJ