По какой-то причине, попытка отличить класс X
к другому классу, Y
, в третьем классе Z
выбрасывает ClassCastException
. Это кажется мне неправильным, поскольку класс X
расширяет класс Y
. Есть ли какая-то конкретная причина, почему класс X
не может быть отлит до Y
, хотя X
расширяет его?Невозможно отнести класс «X» к классу «Y», хотя X расширяет Y?
См следующий код для справки:
Y
:
public abstract class Y {
/**
* Called when the extension is enabled.
*/
public void onEnable() {
}
}
X
:
public class X extends Y {
@Override
public void onEnable() {
// Extension specific code.
}
}
Z
: (Этот код является т он кода, где ClassCastException
берет свое начало.)
public class Z {
private boolean loadExtension(ExtensionDescription description) {
try {
URLClassLoader loader = new ExtensionClassLoader(new URL[]{description.getFile().toURI().toURL()});
Y y = (Y) loader.loadClass(description.getMain()).newInstance();
} catch (Throwable t) {}
}
}
Если loader.loadClass(description.getMain()).newInstance();
известно, чтобы создать новый экземпляр X
, то почему бы кастинг на Y
дело ClassCastException
?
В программе, проверьте 'X.class == loader.loadClass (description.getMain() '. –
Только причина будет заключаться в том, что X и Y загружаются двумя разными загрузчиками классов. – TheCodingFrog
@ TheCodingFrog. На самом деле это может быть проблема что я думаю об этом. Класс Z работает в своей собственной программе, тогда как класс X запущен в программе, которая выполняется программой, в которой запущен класс Z. (Если это имеет смысл, это довольно сложно.) Мне, возможно, придется выяснить, как получить загрузчик классов родительской программы. –