Можно ли сравнить объекты java.lang.Class с == в Java?

Возможный дубликат:
Гарантирует ли Java, что Object.getClass() == Object.getClass()?

Если у меня есть такой класс, как

Class<? extends MyObject> aClass = ...;

могу ли я тогда сделать:

if (aClass == MySubObject.class) { ... }

или я должен сделать

if (aClass.equals(MySubObject.class)) { ... }

Кроме того, в дополнение к знанию ответа, я хотел бы знать ссылку, то есть где это определено.

Я предпочитаю использовать == если возможно, потому что я нахожу это более читабельным и быстрее. (Очевидно, что это не так намного более читабельно или намного быстрее, но все же, зачем использовать более сложное решение, если доступно более простое решение.)

2 ответа

Решение

Ты можешь использовать == но вы ничего не получите, потому что это именно то, что Class.equals() делает.

Класс не определяет метод equals, поэтому он наследует от Object. Вы можете прочитать источник, чтобы увидеть это.

я использую equals по возможности, тогда мне не нужно об этом думать. Когда я читаю код (включая мой код), мне все еще не нужно спрашивать себя, == такой же как equals или нет для этого класса.

Вы можете сравнить классы с == и это то же самое, что equals для случая Class, но ваш пример предполагает, что вы хотите знать, имеет ли один класс отношения "есть" с другим. Два класса равны, только если они одного и того же класса, и четко Vehicle.class != Car.class,

Если вы хотите знать, является ли Car это Vehicle использовать Class#isAssignableFrom,

Другие вопросы по тегам