2010-08-18 18 views
18

Normalde java.lang.ClassCastException .. neden olsun nedir? Benim uygulamada aşağıdaki hatayı alıyorum yanlış şeye yayın yaptığınızdan da ondanjava.lang.ClassCastException

java.lang.ClassCastException: [Lcom.rsa.authagent.authapi.realmstat.AUTHw 
+0

Tam istisna mesajınız yok gibi görünüyor. Java 5 veya daha yenisini kullandığınızı varsayarsak istisna, * ne * ne * ne * dönüştürülemez * ayrıntılarını içermelidir. java.lang.ClassCastException: java.lang.String belgesel için java.lang.Integer ' – mikej

cevap

36

the documentation göre ... yardımcı olacaktır: Fırlayan

kod bir Object döküm girişiminde belirtmek için Bunun bir örnek olmadığı alt sınıfı. Örneğin, aşağıdaki kod, bir ClassCastException oluşturur:

Object x = new Integer(0); 
System.out.println((String)x); 
+5

+1'e dönüştürülemiyor. İstisnaların belgelenmesi genellikle neyin yanlış olabileceğine dair iyi bir ipucu verir. Dokümantasyon için –

+0

+1! Eğer her zaman google kullanmaktan hoşlanmıyorsanız, java kütüphanesinin kaynağını indirebilirsin (ya da java sdk klasöründe bir yerde src.zip varsa ara). Sonra projenize bağlarsanız, ilgili dosyayı açabilir ve javadoc'ları buradan okuyabilirsiniz ... –

+0

bine Laur, ce mic e internetul :) – ieugen

2

- Belirli bir tipe dönüştürmek için çalışıyoruz, ve ekspres eder nesne bu türü ile uyumsuz için . Örneğin: bir kod örneği sağlayabilir Eğer

Object x = "this is a string"; 
InputStream y = (InputStream) x; // This will throw ClassCastException 

, bu gerçekten

0
ClassA a = <something>; 
ClassB b = (ClassB) a; 

2. hat Sınıf A ClassB bir alt sınıf değilse başarısız olur ve bir ClassCastException atacaktır.

6

@ Laurențiu Dascălu'nun cevabı bir ClassCastException'ı nasıl/neden aldığınızı açıklar.

İstisna mesajınız bana oldukça şüpheli görünüyor, ancak "[Lcom.rsa.authagent.authapi.realmstat.AUTHw" ifadesinin, yayınlamaya çalıştığınız nesnenin gerçek türünün olduğunu bilmenizde yardımcı olabilir. com.rsa.authagent.authapi.realmstat.AUTHw[]; yani bir dizi nesnesiydi.

Normalde böyle bir sorunu çözmek için bir sonraki adımlar şunlardır: stacktrace inceleyerek

  • ne görmek, ilgili kaynak kodunun incelenmesi sınıf istisna attı ki hangi çizgi,
  • anlamaya beklenen tür ve
  • "yanlış" türüyle nesnenin nereden geldiğini görmek için geri izleme.
12

A ClassCastException ocurrs bunu olmayan bir türe bir nesne örneğini döküm deneyin. Döküm, yalnızca, dökümlenen nesne, yayınlamaya çalıştığınız türe "bir" bir ilişki izlediğinde çalışır. Örnek

için
Apple myApple = new Apple(); 
Fruit myFruit = (Fruit)myApple; 

Bu çalışma bir elma 'meyvesidir' çünkü. Ancak bunu tersine çevirirsek.

Fruit myFruit = new Fruit(); 
Apple myApple = (Apple)myFruit; 

Bu bir ClasCastException atar, çünkü bir Meyve bir Apple değildir (her zaman).

Bu iyi bir uygulama ilk olarak bir instanceof çek ile herhangi açık yayınları korumak olacak:

if (myApple instanceof Fruit) { 
    Fruit myFruit = (Fruit)myApple; 
} 
+0

Eğer son örnek 'if (myFruit instanceof Apple)' e dönüşürse {Apple myApple = (Apple) myFruit; }, daha açıklayıcı olacak – AnnabellChan

1

x !instance of Long prob senin kalıcılığı

<property name="openjpa.Compatibility" value="StrictIdentityValues=false"/> 

ekle kaçının.xml

İlgili konular