Những gì người khác có thể ném một ClassCastException trong java?


0 Phiếu
Đã hỏi 09/5/2016 bởi N9818Teall (260 điểm)
Đây là một câu hỏi phỏng vấn. Các cuộc phỏng vấn là hơn, nhưng câu hỏi này là vẫn còn trên tâm trí của tôi. Tôi không thể yêu cầu phỏng vấn, tôi đã không nhận được công việc. kịch bản:
  • đặt object class C1 ở đến một bộ nhớ cache với phím "a"
sau mã số: C1 c1FromCache = (C1) cache.get("a"); code này ném một ClassCastException. những gì những lý do có thể? tôi nói vì có người khác đặt object khác với cùng một phím và vì vậy overwrote nó. Tôi đã nói không, suy nghĩ của những khả năng khác. Tôi nói có lẽ bình định class C1 đã không có ngày này node (không chắc chắn nếu điều này sẽ cho kết quả trong một diễn viên class hoặc một ClassNotFoundException, nhưng tôi đã nắm cho bất kỳ chính bây giờ. Sau đó, tôi đã nói có thể sai phiên bản của lớp? Họ nói rằng bình class C1 có trong tất cả các nút, tương tự). chỉnh sửa / thêm hỏi nếu nhận ném ClassCast nhưng đã nói không có. sau đó tôi nói với ông tôi hành động để giải quyết một vấn đề sẽ là thả trong một test jsp mà có thể bắt chước các hành động và đặt tốt hơn đăng nhập (theo dõi stack) sau khi một ngoại lệ. đó là phần 2 của câu hỏi (lý do tại sao bạn sẽ làm gì nếu điều này xảy ra trong sản xuất) có ai khác có bất cứ ý tưởng về lý do tại sao một bộ nhớ cache get sẽ cho kết quả trong một vấn đề diễn viên?

3 Câu trả lời

0 Phiếu
Đã trả lời 24/5/2016 bởi tritt (490 điểm)
 
Câu trả lời hay nhất
Một lý do có thể là một phần của code chèn object sử dụng một classloader khác nhau hơn so với code đang truy xuất nó. Một instance một class không có thể được đúc để cùng class được nạp bởi một classloader khác nhau. phản ứng để chỉnh sửa:
bạn sẽ làm gì nếu điều này xảy ra trong sản xuất?
điều này thường xảy ra khi đọc và chèn các mô-đun mỗi bao gồm bình cùng có chứa C1. Kể từ khi hầu hết container cố classloader cha mẹ lần đầu tiên, và sau đó local classloader ( cha mẹ đầu tiên chiến lược), các giải pháp chung cho vấn đề để thay vào đó tải class trong cha mẹ thường gần nhất để các chèn và đọc các mô-đun. Nếu bạn di chuyển module có chứa class C1 cho các mô-đun phụ huynh, bạn buộc cả submodules để có được class từ cha mẹ, loại bỏ bất kỳ sự khác biệt classloader.
Đã bình luận 26/5/2016 bởi forMaune (240 điểm)
à quên điều này yêu cầu anh ta và ông nói không có CNTT của các diễn viên local
Đã bình luận 26/5/2016 bởi glenn (260 điểm)
Có lẽ nó là 'com.abc.C1' và 'cache.get("a")' trở lại 'com.xyz.C1': P
+1 Phiếu
Đã trả lời 24/5/2016 bởi Bruso (200 điểm)
Một lý do có thể là một phần của code chèn object sử dụng một classloader khác nhau hơn so với code đang truy xuất nó. Một instance một class không có thể được đúc để cùng class được nạp bởi một classloader khác nhau. phản ứng để chỉnh sửa:
bạn sẽ làm gì nếu điều này xảy ra trong sản xuất?
điều này thường xảy ra khi đọc và chèn các mô-đun mỗi bao gồm bình cùng có chứa C1. Kể từ khi hầu hết container cố classloader cha mẹ lần đầu tiên, và sau đó local classloader ( cha mẹ đầu tiên chiến lược), các giải pháp chung cho vấn đề để thay vào đó tải class trong cha mẹ thường gần nhất để các chèn và đọc các mô-đun. Nếu bạn di chuyển module có chứa class C1 cho các mô-đun phụ huynh, bạn buộc cả submodules để có được class từ cha mẹ, loại bỏ bất kỳ sự khác biệt classloader.
0 Phiếu
Đã trả lời 24/5/2016 bởi Is_myler (140 điểm)
Và cuối cùng, ai đó tấn công String intern table cho chuỗi "a". Xem một ví dụ về làm thế nào nó có thể được thực hiện ở đây .
Đã bình luận 26/5/2016 bởi LochHunke (570 điểm)
đây là một câu hỏi khó khăn/bệnh cho một cuộc phỏng vấn
Đã bình luận 26/5/2016 bởi hobb_vitek (110 điểm)
Có lẽ ' nhận được '' s thực hiện 'mới ClassCastException (); vứt'..?

ToughDev Q&A là gì?

Trang web hỏi đáp cho các bạn đam mê lập trình, phát triển phần mềm và các vấn đề kỹ thuật khác. Với sự giúp đỡ của bạn, chúng tôi hy vọng sẽ xây dựng thành công một thư viện đầy đủ các câu hỏi và trả lời về tất cả các vấn đề có liên quan đến lập trình!







...