Я погрузочные классы через ClassLoader:Проверяется класс ребенок класса
Class<?> clazz = urlClassLoader.loadClass(name.substring(0, name.length() - 6).replaceAll("/", "."));
System.out.println(clazz);
System.out.println(clazz.isInstance(SkillCast.class));
System.out.println(SkillCast.class.isInstance(clazz));
System.out.println(SkillCast.class.isAssignableFrom(clazz));
System.out.println(clazz.isAssignableFrom(SkillCast.class));
Это моя структура:
public class SkillFireball extends SkillCast implements ISkillThrown
public abstract class SkillCast extends Skill
И принты:
class skills.SkillFireball
false
false
false
false
Что я уверен, что clazz - SkillFireball, и я могу печатать имена полей/методов.
Как я могу проверить, является ли clazz дочерним элементом SkillCast?
EDIT
private static URLClassLoader urlClassLoader;
И код:
ClassLoader cl = Loader.instance().getModClassLoader();
urlClassLoader = URLClassLoader.newInstance(urls.toArray(new URL[urls.size()]), cl);
Где #getModClassLoader() возвращает:
// The class loader we load the mods into.
private ModClassLoader modClassLoader;
И:
public class ModClassLoader extends URLClassLoader
Как это работает: Minecraft Forge API загружается @Mod. Мой мод предоставляет SkillCast.class и при загрузке пытается прочитать каталог игр и загружать классы в .jar-файлы. Теперь - я не очень понимаю, что мне делать: C
'SkillCast.class.isAssignableFrom (clazz)' * does * tel, если 'clazz' является подклассом' SkillCast'. Вы уверены, что у вас нет более одного класса под названием SkillCast (в том числе, когда тот же файл класса загружается разными загрузчиками классов)? – immibis
Уверен, что есть только один SkillCast. Что может быть важно, так это тот факт, что SkillCast загружается с помощью другого класса ClassLoader (основная программа), а фактические навыки.jar загружаются с использованием другого классаLoader - может это проблема? – Ernio
Если один и тот же файл классов загружается двумя разными загрузчиками классов, это создает два разных класса. – immibis