В документации к интерфейсу утилиты Типы , экземпляр которой должен быть сделан доступным для процессора аннотаций для Java SE 6 или 7 компилятором, есть два метода, которые меня интересуют для кода фрагмент, над которым я работаю. Мне нужно проверить, является ли тип поля типом, который наследуется от определенного абстрактного класса. Два метода, которые кажутся применимыми: isAssignable
и isSubtype
. Но я не уверен, какой из них использовать.
Я проверил те части спецификации языка Java, на которые есть ссылки в приведенной выше документации. Я понимаю разницу между понятиями подтипов и преобразованием присваивания (по крайней мере, я так думаю). Если я не ошибаюсь, java.lang.Short
не будет подтипом примитива long
(подтип определяется среди примитивов, но не между классами и примитивами), но его можно назначать так же, как благодаря распаковке и расширению преобразования:
final Short s = 0;
final long l = s;
Тем не менее, я все еще не уверен, какой лучший метод использовать в моем случае. Проверка на подтип кажется более строгой и предпочтительной, чем присваиваемость, но когда дело доходит до классов, создается впечатление, что один автоматически подразумевает другой.
Короткая версия: являются ли isAssignable
и isSubtype
эквивалентными, когда сравниваемые TypeMirrors оба для классов (не интерфейсов или перечислений)?