Как я могу сравнить 2 класса?
Следующий оператор if никогда не проходит, хотя класс является типом MyClass:
public void(Class class) {
if (class == MyClass.class){
}
}
Как я могу сравнить 2 класса?
Следующий оператор if никогда не проходит, хотя класс является типом MyClass:
public void(Class class) {
if (class == MyClass.class){
}
}
if (clazz.equals(MyClass.class)) {
}
BTW, класс - зарезервированное слово.
Чтобы проверить, является ли 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
.
Вы можете использовать ==
или .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
Вы можете использовать оператор 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");
}
}