هل من الممكن كتابة المصبوب إلى فئة أصحاب الوالدين؟
-
29-09-2019 - |
سؤال
أنا بصدد نقل مشروع C# في Java. لدي جزء من التعليمات البرمجية التي تبدو هكذا:
public abstract class A
{
public abstract void foo() throws Exception;
public abstract void bar();
}
وبعد ذلك ، في مكان آخر ...
public class FirstOuterClass {
public class FirstInnerClass extends A {
// defines foo() and bar()
}
}
أبعد في مكان آخر ...
public class SecondOuterClass {
public class SecondInnerClass extends A {
// defines foo() and bar()
}
}
وأخيرا ، حتى المزيد في مكان آخر ....
HashMap<Type, A> handlers = new HashMap<Type, A>();
for (Entry e : HashMapOfStringToEntry.getTypes())
{
if(e.Handler != null) {
handlers.put(e.Type, (A) e.Handler);
}
}
يمكن أن يكون E.Handler إما نوعًا من FirstInnerClass أو SecondInnerClass. إنها محادثة E.Handler إلى (أ) التي تسبب الخطأ التالي:
java.lang.ClassCastException: java.lang.Class
لقد تحققت من ناتج تصحيح الأخطاء من أن E.Handler هو بالفعل نوع من الفئة من FirstOuterClass $ FirstInnerClass. لذلك ، إما أن هناك اختلافات في الصب بين C# & Java (ممكن) أو لا أقدم بناء الجملة الصحيح في مكان ما (ممكن أيضًا).
(أنا آسف لعدم لصق الكود بأكمله ، مثل ماهية HashMaps. لا أريد أن أشعل المشكلة الحقيقية. إنه في الأساس رسم خرائط بين مفتاح سلسلة واثنين من الفئات التي تمد التجريدة A.)
المحلول
إذا كان أحد فصولك الداخلية يفشل في الإلقاء A
, ، ثم يبدو استثناءك:
java.lang.classcastexception: لا يمكن إلقاء FirstouterClass $ firstInnerClass على
بدلاً من ذلك ، تحصل على هذا:
java.lang.classcastexception: java.lang.class
هل تقوم بقطع "لا يمكن إلقاؤه إلى" في نهاية هذا؟
بغض النظر ، يبدو ذلك e.Handler
من النوع java.lang.Class
. كما في ، FirstOuterClass$FirstInnerClass
نفسها بدلا من مثيل واحد منه.
نصائح أخرى
من رسالة الاستثناء ، يبدو أنك تحاول إلقاء مثيل Class
, ، ليس مثال الفئة التي يمثلها.