Подтвердить что ты не робот

Java - Сравнение классов?

Как я могу сравнить 2 класса?

Следующий оператор if никогда не проходит, хотя класс является типом MyClass:

public void(Class class) {
   if (class == MyClass.class){

   }
}
4b9b3361

Ответ 1

if (clazz.equals(MyClass.class)) {

}

BTW, класс - зарезервированное слово.

Ответ 2

Чтобы проверить, является ли clazz (суб) типом MyClass do

MyClass.class.isAssignableFrom(clazz)

Из javadoc для Class.isAssignableFrom

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

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

Итак,

Object.class.isAssignableFrom(String.class)

истинно, потому что каждый String также является Object, но

String.class.isAssignableFrom(Object.class)

является ложным, потому что не все Object являются String s.


Название "isAssignableFrom" происходит от того, что

Class1 x = (Class2) null;

является только законным, если

Class1.class.isAssignableFrom(Class2.class)

Т.е. мы можем назначить поле или переменную со статическим типом Class1 значением, которое приходит из выражением, статическим типом которого является Class2.

Ответ 3

Вы можете использовать == или .equals() для сравнения объектов Class.

Пример:

class MyClass
{
    public static void main (String[] args) throws java.lang.Exception
    {
        MyClass m = new MyClass();
        if (MyClass.class == m.getClass())
        {
            System.out.println("it worked");
        }
    }
}

Демо: http://ideone.com/AwbNT

Ответ 4

Вы можете использовать оператор instanceof, чтобы проверить, принадлежит ли экземпляр определенному классу или его подклассам.

class MyClass{}

class SubClass extends MyClass{}

public static void main(String args[]) {

    SubClass object = new SubClass();

    if (object instanceof MyClass) {
        System.out.println("It works, too");
    }
}