Как я всегда это понимал, основными случаями, когда подходит instanceof
, являются:
- Реализация
Object.equals(Object)
. Поэтому, если бы я писал классList
и не расширялAbstractList
по какой-либо причине, я бы выполнилequals(o)
, сначала проверивo instanceof List
, а затем сравнив элементы. - Значительная (алгоритмическая?) оптимизация для особого случая, который не меняет семантики, а только производительность. Например,
Collections.binarySearch
выполняет тестinstanceof RandomAccess
и использует немного другой бинарный поиск для списковRandomAccess
и nonRandomAccess
.
Я не думаю, что instanceof
представляет запах кода в этих двух случаях. Но есть ли другие случаи, когда разумно использовать instanceof
?