الحصول على استثناء من الفصل حيث يكون كلا الفئتين متماثلين تمامًا

StackOverflow https://stackoverflow.com/questions/2371967

  •  24-09-2019
  •  | 
  •  

سؤال

أقوم بمشروع JBoss Seam وعندما أشاهد نموذجًا أحصل على هذا الخطأ.

java.lang.ClassCastException:
it.cogitoweb.csi.entity.csiorelav.CsiTipoLav cannot be cast to
it.cogitoweb.csi.entity.csiorelav.CsiTipoLav

في نفس فئة JPA نفسها التي ترتبط بالنموذج الذي يظهر على الشاشة ، ليس من المنطقي بالنسبة لي لماذا هو نفس الفئة ، يبدو من المستحيل.

هل كانت مفيدة؟

المحلول

يحدث هذا عندما اثنين مختلفين ClassLoader كائنات تحميل فئات مع نفس الاسم. تعتمد المساواة بين فئتين في جافا على الاسم المؤهل بالكامل و تحميل الفئة الذي قام بتحميله.

لذلك ، إذا كانت هناك فئتين من فئة محمولين مستقلة من نفس الموقع ، فلن تتمكن كائنات هذه الأنواع من نوعها من نوعها ، حتى لو تم تسمية فصولهم كما هي.

نصائح أخرى

كما أوضح Joachim سابقًا ، يحدث java.lang.classcastexception عادةً عندما يقوم اثنان من صانعي Classloads بتحميل الفئات بنفس الاسم. ومع ذلك ، فقد صادفت موقفًا آخر عندما يحدث هذا.

يمكن أن يحدث هذا مع بعض IDE التي تعيد تحميل الفئات تلقائيًا التي تم تعديلها. في مثل هذه الحالات ، قد تكون هناك إصدارات أقدم من الفصل المحتفظ بها في الذاكرة مما يسبب ClassCastException.

فيما يلي بعض الطرق التي يمكنك من خلالها حل هذه المشكلة:

  1. إذا كنت تكتب محمل فئة مخصصة ، أثناء تحميل فئة ، تأكد من أن محمل الفئة القاعدة/الافتراضية لا يحتوي بالفعل على مثيل لتلك الفئة المحملة.

  2. اجعل الفصل يجري تحميل فئة فرعية من الفئة التي تم تحميلها بالفعل بواسطة محمل الفئة الافتراضية.

  3. اجعل الفصل يجري تحميله تطبيق واجهة تم تحميلها بالفعل بواسطة محمل الفئة الافتراضية.

مزيد من المعلومات هنا - http://www.jspwiki.org/wiki/A2Aclasscastexception

وذلك لأن الفصل قد تم تحميله بواسطة اثنين من صانعي الفئة المختلفين. لا يمكنك الإلقاء بينهما.

من المحتمل أن تكون قد حصلت على نسخة مكررة من CsiTipoLav في التطبيق الخاص بك ، ويتم تحميل نسختين مختلفتين في أوقات مختلفة من قائدي فئة مختلفة. لدى JBOSS عددًا كبيرًا من لاعبي الصفوف المختلفين في التسلسل الهرمي ، ومن السهل الحصول على الأشياء في تطور.

تأكد من أن لديك نسخة واحدة فقط من الفصل.

يتم تحميل الكائن الذي تحاول إلقاؤه بواسطة جهاز تحميل فئة مختلف عن الكائن الذي قام بتحميل الفصل الذي تحاول إلقاؤه فيه.

في حالتي ، كان لديّ اثنان مختلفان *. وأردت تحميل فصل من الآخر. لذلك اضطررت إلى عزل فئة الرابطة. لقد استخدمت هذا الوصف:

http://www.thorgull.be/wiki/index.php؟title=classloader_isolation_in_jboss

عملت معي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top