Я в процессе переноса проекта 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 к (A) вызывает следующую ошибку:
java.lang.ClassCastException: java.lang.Class
По результатам отладки я подтвердил, что e.Handler действительно является типом класса FirstOuterClass $ FirstInnerClass. Так что либо есть различия в приведении между C # и Java (возможно), либо я не предоставляю правильный синтаксис где-то (также возможно).
(Прошу прощения, что не вставил весь код, например, для чего нужны HashMaps. Я не хочу запутывать реальную проблему. По сути, это отображение между ключом String и парой классов, расширяющих абстрактный а.)