Любая причина, чтобы предпочесть getClass () над instanceof при создании .equals ()? - PullRequest
166 голосов
/ 27 февраля 2009

Я использую Eclipse для генерации .equals() и .hashCode(), и есть опция с пометкой «Использовать instanceof» для сравнения типов ». По умолчанию этот параметр отключен и используется .getClass() для сравнения типов. Есть ли причина, по которой я бы предпочел .getClass() над instanceof?

Без использования instanceof:

if (obj == null)
  return false;
if (getClass() != obj.getClass())
  return false;

Использование instanceof:

if (obj == null)
  return false;
if (!(obj instanceof MyClass))
  return false;

Я обычно проверяю опцию instanceof, затем захожу и убираю галочку "if (obj == null)". (Это избыточно, поскольку нулевые объекты всегда будут давать сбой instanceof.) Есть ли причина, по которой это плохая идея?

Ответы [ 11 ]

0 голосов
/ 01 декабря 2015

На самом деле экземпляр проверки, принадлежит ли объект какой-либо иерархии или нет. пример: объект Car относится к классу Vehical. Таким образом, «new Car () instance of Vehical» возвращает true. И «new Car (). GetClass (). Equals (Vehical.class)» возвращает false, хотя объект Car принадлежит классу Vehical, но он классифицируется как отдельный тип.

...