Даункинг иногда необходим и уместен. В частности, это часто уместно в тех случаях, когда у кого-то есть объекты, которые могут иметь или не иметь какую-то способность, и кто-то хочет использовать эту способность, когда она существует, при обработке объектов без этой способности каким-либо способом по умолчанию. В качестве простого примера, предположим, что a Stringспрашивают, равен ли он некоторому другому произвольному объекту. Чтобы одно Stringсовпадало с другим String, оно должно проверять длину и массив вспомогательных символов другой строки. Если a Stringспрашивают, равно ли оно a Dog, он не может получить доступ к длине Dog, но он не должен этого делать; вместо этого, если объект, с которым Stringдолжен сравнивать a, не являетсяStringсравнение должно использовать поведение по умолчанию (сообщая, что другой объект не равен).
Время, когда удушение следует считать наиболее сомнительным, это когда «известный» объект, о котором известно, что он имеет надлежащий тип. В общем, если известно, что объект является a Cat, следует использовать переменную типа Cat, а не переменную типа Animal, чтобы ссылаться на него. Однако бывают случаи, когда это не всегда работает. Например, Zooколлекция может содержать пары объектов в четных / нечетных слотах массива, ожидая, что объекты в каждой паре смогут воздействовать друг на друга, даже если они не могут воздействовать на объекты в других парах. В таком случае объекты в каждой паре все равно должны будут принимать неспецифический тип параметра, чтобы они могли синтаксически передавать объекты из любой другой пары. Таким образом, даже если CatэтоplayWith(Animal other)Метод будет работать только в том случае, если он otherбыл Cat, а Zooдолжен иметь возможность передавать ему элемент Animal[], поэтому его тип параметра должен быть, Animalа не Cat.
В тех случаях, когда снижение рейтинга на законных основаниях неизбежно, его следует использовать без каких-либо сомнений. Ключевой вопрос состоит в том, чтобы определить, когда можно разумно избегать удушения, и избегать его, когда это разумно возможно.