Является ли (тип) String.class подтипом (типа) Object.class? - PullRequest
5 голосов
/ 22 мая 2009

В Java объекты класса имеют те же отношения наследования, что и классы, которые они представляют?

Ответы [ 7 ]

8 голосов
/ 22 мая 2009

Свойство .class всегда возвращает объект Class. Класс Class (странный) имеет универсальный параметр. Универсальные типы параметров являются подклассами.

Class<String> stringClass = String.class;
Class<Object> objectClass = Object.class;

И поскольку с обобщениями Type<foo> является НЕ супертипом Type<subtype_of_foo> (см. руководства по Java ), это означает, что ответом будет «Нет».

4 голосов
/ 22 мая 2009

Class объекты в Java все одного и того же класса.

Вы можете сказать, потому что если вы посмотрите на Javadoc, то увидите, что класс Class равен final.

1 голос
/ 22 мая 2009

попробуйте этот код:

boolean answer = Object.class.isAssignableFrom(String.class);
System.out.println(answer); // true!

однако:

Class<Object> string = String.class; <-- compile-time error
Class<? extends Object> string = String.class; <-- it's ok 
1 голос
/ 22 мая 2009

Нет, есть только один класс с именем Class. String.class является экземпляром Class, а также Object.class.

0 голосов
/ 23 мая 2009

Все объекты класса являются экземплярами класса.

Если вы хотите узнать иерархию класса, вы можете вызвать getSuperClass () и getInterfaces ()

Примечание: вам может потребоваться вызвать их рекурсивно, чтобы получить все суперклассы и интерфейсы.

0 голосов
/ 22 мая 2009

Если я правильно понимаю ваш вопрос, это не так. Объект, представляющий класс java.lang.String, как и любой другой класс, всегда имеет класс java.lang.Class.

Имейте в виду, что java.lang.Class определяется как final , поэтому вы не можете подкласс it.

0 голосов
/ 22 мая 2009

Причина, по которой класс не расширяет класс, даже если Y расширяет X, заключается в том, что для любого универсального типа G G не расширяет G

Возможно, вы захотите посмотреть это в FAQ и т. Д. Мешок яблок - это не мешок фруктов, хотя яблоко - это фрукт; потому что ко второму можно добавить любые фрукты, а к первым - только яблоки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...