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

Проверка типа класса (.class) равна некоторому другому типу класса

Действителен ли следующий код?

void myMethod (Class classType) {
   if (classType == MyClass.class) {
       // do something
   }
}

myMethod (OtherClass.class);

Если нет, есть ли другой подход, где я могу проверить, имеет ли переданный .class (тип класса) тип - MyClass?

4b9b3361

Ответ 1

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

Обратите внимание, что ваш код учитывает точное совпадение, однако - он не будет предоставлять вид "совместимости присваивания", который (скажем) instanceof делает, когда видит, ссылается ли значение на объект, являющийся экземпляром данный класс. Для этого вам нужно посмотреть Class.isAssignableFrom.

Ответ 2

Я бы скорее сравнил канонические имена, чтобы быть полностью уверенными, classType.getCanonicalName(). equals (MyClass.class.getCanonicalName()).

Обратите внимание, что это может привести к проблемам с анонимными и внутренними классами, если вы их используете, вы можете вместо этого использовать getName.

Ответ 3

Это сработало для меня

public class Test
{

void myMethod (Class classType) {
    System.out.println(classType.isAssignableFrom(Test.class));   
}

public static void main(String[] args) {
    Test t = new Test();
    t.myMethod( String.class );

}

}

Ответ 4

Я думаю, что вы ищете instanceof.

Animal a = new Tiger();
System.out.println(a instanceof Tiger); // true
System.out.println(a instanceof Animal); //true

В качестве альтернативы вы можете сравнить два класса с

a.getClass() == b.getClass()

Ответ 5

Не использовать classType.getCanonicalName().equals(MyClass.class.getCanonicalName()) вышесказанное не будет рассматривать какие-либо дженерики (все карты одинаковы, все они одинаковы и т.д.)