Когда использовать Class.isInstance() и когда использовать оператор instanceof?

Возможный дубликат:
Оператор Java isInstance vs instanceOf

Когда использовать Class.isInstance() и когда использовать оператор instanceof?

Java предоставляет два варианта проверки совместимости назначений. Что использовать, когда?

Ответ 1

Я думаю, официальная документация дает вам ответ на этот вопрос (хотя и довольно неспецифическим образом):

Этот метод является динамическим эквивалентом экземпляра языка Java Оператор.

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

Например, вы можете использовать его для записи метода, который проверяет, совместимы ли два произвольно типизированных объекта, например:

public boolean areObjectsAssignable(Object left, Object right) {
    return left.getClass().isInstance(right);
} 

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

Ответ 2

Для instanceof вам нужно знать точный класс во время компиляции.

if (foo instanceof ThisClassIKnowRightNow)
   ...

Для isInstance класс определяется во время выполнения. (позднее связывание), например

if (someObject.getClass().isInstance(foo))
   ...