Как проверить instanceof аргумента, который является объектом класса?

Я пытаюсь создать универсальный загрузчик классов. Мне нужно проверить классы, которые я загружаю, по аргументу метода, чтобы определить, относятся ли они к одному и тому же классу.

Код в основном объясняет, что я пытаюсь сделать.

private static LinkedList<Object> loadObjectsInDirectory(Class class0, File dir) throws ClassNotFoundException {

            LinkedList<Feature> objects = new LinkedList<Object>();

            ClassLoader cl = new GenericClassLoader();

            for(String s : dir.list()) {
                Class class1 = cl.loadClass(s);
                try {
                    Object x = class1.newInstance();
                    if (x instanceof (!!! class0 !!!) ) {
                        objects.add(x);
                    }
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {
                }

            }

            return objects;

        }

Как это достигается?


person Bijan    schedule 30.03.2011    source источник
comment
келасс??!? почему люди должны продолжать использовать творческие альтернативные варианты написания класса, например. klass, clazz, а не простой и менее резкий class0 или class1 или cl или что-то в этом роде?   -  person Jason S    schedule 30.03.2011


Ответы (1)


Похоже, вам нужен isAssignableFrom

if (kelass.isAssignableFrom(klass)) {
   objects.add(x);
}

JavaDoc

Определяет, является ли класс или интерфейс, представленный этим объектом класса, таким же, или является суперклассом или суперинтерфейсом класса или интерфейса, представленного указанным параметром класса. Он возвращает true, если это так; в противном случае возвращается ложь. Если этот объект класса представляет примитивный тип, этот метод возвращает значение true, если указанный параметр класса точно соответствует этому объекту класса; в противном случае возвращается ложь.

В частности, этот метод проверяет, может ли тип, представленный указанным параметром класса, быть преобразован в тип, представленный этим объектом класса, посредством преобразования идентификатора или посредством преобразования расширения ссылки. Подробности смотрите в Спецификации языка Java, разделы 5.1.1 и 5.1.4.

person Joel    schedule 30.03.2011
comment
И, конечно же, больше нет необходимости создавать экземпляр класса для его загрузки. - person Lawrence Dol; 30.03.2011