Является экземпляром считается плохой практикой? Если да, то при каких обстоятельствах instanceof по-прежнему предпочтительнее?

на протяжении многих лет, я пытался избежать instanceof всякий раз, когда это возможно. Использование полиморфизма или шаблона посетителя, где это применимо. Я полагаю, что в некоторых ситуациях это просто облегчает обслуживание... Есть ли еще какие-то недостатки, о которых следует знать?

однако я вижу его здесь и там в библиотеках Java, поэтому я полагаю, что у него есть свое место? При каких обстоятельствах это предпочтительно? Разве это неизбежно?

2 ответов


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

Idem в некотором обслуживании устаревшего кода, где вы не можете ввести новое поведение во многих старых классах, чтобы добавить новый небольшая функция или исправление ошибок...


это определенно имеет свое место в реализации запаса equals. Е. Г.

public boolean equals ( Object o )
{
  if ( this == o )
  {
     return true;
  }

  if ( ! (o instanceof MyClass) )
  {
    return false;
  }

  // Compare fields
  ...
}

одна аккуратная вещь, чтобы знать о instanceof является то, что его LHS может быть null и в этом случае выражение false.