Чтобы проверить, является ли 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
.