Посмотрите, является ли объект экземпляром класса, переданного через строку - PullRequest
4 голосов
/ 31 января 2010

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

Мне нужно иметь возможность взять строку во время выполнения, относящуюся к определенному классу, например:

string s = "mypackage.MySuperClass"

Тогда у меня может быть объект какого-то типа. Это может быть одно из следующих:

mypackage.MySuperClass obj = new mypackage.MySuperClass();

или

mypackage.MySubClass obj2 = new mypackage.MySubClass();

или

someotherpackage.SomeOtherClass obj3 = new someotherpackage.SomeOtherClass();

Что мне нужно сделать, так это посмотреть, равен ли объект (тип которого определяется во время выполнения) строке s (который также определяется во время выполнения совершенно другими способами).

В вышеприведенных случаях я хотел бы, чтобы obj и obj2 были того же типа, что и s (поскольку MySubClass является подклассом MySuperClass), а obj3 - нет.

Есть ли простой способ сделать это в Java? Возможно что-то с использованием instanceOf?

Ответы [ 2 ]

7 голосов
/ 31 января 2010

Похоже, вы хотите что-то вроде этого:

boolean isInstance(Object o, String className) {
    try {
        Class clazz = Class.forName(className);
        return clazz.isInstance(o);
    } catch (ClassNotFoundException ex) {
        return false;
    }
}

Или вы можете сделать это наоборот - взять класс О (o.getClass()), найти все классы предков и сравнить их имена с className.

1 голос
/ 31 января 2010

Вы можете использовать Class.forName(String className), чтобы получить Class на основе переданного строкового значения.

Если вас беспокоит только то, является ли это экземпляром определенного класса, вы можете затем вызвать isInstance(Object o) на Class, чтобы проверить, является ли параметр экземпляром класса.

Если вам действительно нужен объект класса, вы можете вызвать newInstance() на Class. Затем вы можете проверить полученный объект с помощью instanceOf против другого объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...