Başka java ClassCastException atmak ne olabilir?
Bu röportaj bir soru.
Görüşme sona erdi, ama bu soru hala aklımda.
İşi alamadım olarak görüşmeci sormak, yapamam.
Senaryo:
- sınıf C1 nesne tuşu ile bir önbellek koymak ""
Daha sonra kod:
C1 c1FromCache = (C1) cache.get("a");
Bu kodu bir ClassCastException atar.
Nedenleri neler olabilir?
Çünkü başka biri dedimkoyunbaşka bir aynı anahtar ile nesne ve bu yüzden üzerine. Hayır söylendi, diğer olasılıkları düşünün.
Belki kavanoz tanımlama sınıf C1 bu düğümde kullanılabilir (eğer bu sınıf bir döküm bir sonuç veya bir ClassNotFoundException emin değilim, ama herhangi bir ipucu için şimdi açgözlü davrandım. değil dedim O zaman belki sınıf sürümü yanlış dedim? Sınıf C1 aynı kavanoz bezleri) var dediler.
Ekle/ DüzenleEğer alırsanız sorulan ClassCast atıyordu ama hayır dedi. bundan sonra böyle bir sorunu çözmek için harekete hareketlerini taklit etmek ve daha iyi bir özel durum sonra günlüğü (yığın izleme) vereceğini test jsp düşüş olacağını söylemiştim. soru 2 Bölüm (neden ve eğer bu üretim başına gelseydi ne yapardın)
Herkes başka bir önbellek neden hakkında fikri olan var mıolsundökme sorunu neden olur?
CEVAP
Bir nedeni kod parçası nesne ekleme kodu alınıyor daha farklı bir classloader kullanan olabilir.
Bir sınıfın bir örneği aynı sınıf farklı bir classloader tarafından yüklendi çevirebilirsiniz.
Yanıt düzenlemek için:
Eğer bu üretim başına gelseydi ne yapardın?
Bu genellikle okuma ve yazma modülleri aynı kavanoz C1
içeren her zaman olur.
En kapları üst classloader deneyin bu yana ilk ve yerel classloader (. sonra ^em>Üst ilkstrateji), bu sorun için ortak çözüm yerine takılması için en yakın ortak üst sınıf yüklemek ve okuma modülleri.
Eğer üst modül C1
sınıfı içeren modülün taşırsanız, her iki alt modüller üst sınıf, herhangi bir classloader farklılıkları kaldırma almak için zorla.
Java atmak ne olabilir?...
Nasıl Java başka bir kurucu arayayım m...
Nasıl Java iki dizi bir arada olabilir...
Neden't statik yöntemler Java'da ...
Neden't dizeleri Java ve .değişke...