Java - Сравнение классов? - PullRequest
13 голосов
/ 07 июня 2011

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

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

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

   }
}

Ответы [ 4 ]

35 голосов
/ 07 июня 2011
if (clazz.equals(MyClass.class)) {

}

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

10 голосов
/ 07 июня 2011

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

MyClass.class.isAssignableFrom(clazz)

Из Javadoc для Class.isAssignableFrom

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

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

Так что

Object.class.isAssignableFrom(String.class)

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

String.class.isAssignableFrom(Object.class)

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


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

Class1 x = (Class2) null;

допустимо только тогда, когда

Class1.class.isAssignableFrom(Class2.class)

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

7 голосов
/ 07 июня 2011

Вы можете использовать == или .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

6 голосов
/ 08 июня 2011

Вы можете использовать оператор 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");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...