Java-Как Я Могу Проверить, Наследует Ли Класс От Какого-Либо Класса Или Интерфейса?

надо проверить:

public static boolean check(Class<?> c, Class<?> d)
{
    if (/* c inherits from d */)
        return true;
    else
        return false;
}

как я могу это сделать ?

и возможно ли это без c.newInstance() ?


В первый раз название было неправильным. Теперь все правильно.

6 ответов


использовать isAssignableFrom

if(d.isAssignableFrom(c)){
    // then d is a superclass of c
    // in other words, c inherits d
}

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

источник


существует метод под названием класс#isInterface() на класс

 if (c.isInterface())
            return true;

попробуйте это

if(c.isAssignableFrom(d)){
   return true;
} else {
   return false;
}

как о

public boolean isInterface();

по документам:

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


if (c.isInterface()) return true;

isInterface

public boolean isInterface()

определяет, представляет ли указанный объект класса Тип интерфейса. Возвращается: true если этот объект представляет собой интерфейс; false в противном случае. sAssignableFrom

public boolean isAssignableFrom(Class<?> cls)

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

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

параметры: cls-объект класса для проверки Возвращается: логическое значение, указывающее, могут ли объекты типа cls быть назначены объектам этого класса Бросает: NullPointerException - если указанный параметр класса равен null. С: JDK1.1


вы пробовали с

c.isInterface()???

из docs

определяет, представляет ли указанный объект класса Тип интерфейса.