Как проверить instanceof для аргумента, который является объектом Class? - PullRequest
7 голосов
/ 30 марта 2011

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

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

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;

        }

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

1 Ответ

19 голосов
/ 30 марта 2011

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

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

JavaDoc

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

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

...