Можно ли сравнить объекты 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
,