Я предполагаю, что вы на самом деле профилировали свой код и обнаружили, что использование instanceof
является нетривиальным ударом по производительности? Если нет, то вы почти наверняка решаете проблему, решение которой не стоит вашего времени.
Если все, что вы делаете, это код, подобный этому:
if ( something instanceof MyClass ) {
MyClass mySomething = (MyClass) something;
//...
} else {
//exceptional case
}
Тогда, возможно, сначала можно будет сыграть приведение и позволить ClassCastException
быть вашим "исключительным случаем":
try {
MyClass mySomething = (MyClass) something;
} catch (ClassCastException cce) {
//exceptional case
}
Теперь, хотя это может быть преждевременным оптимизация , было бы преждевременно переосмысливать ваш дизайн. Чрезмерное употребление instanceof
- это дизайнерский запах. В общем, вы должны использовать дженерики и полиморфизм таким образом, чтобы уменьшить количество раз, которое вы использовали бы instanceof
(и действительно приведение) к (почти) нулю.
Если должен выполняться другой код в зависимости от типа объекта, рассмотрите возможность сделать этот код методом экземпляра объекта, и чтобы различные типы соответствовали интерфейсу.
Если вы обнаружите, что «знаете», что объект определенного типа, но вы сделали какой-то шаг, который заставит компилятор отследить этот факт (например, вы поместили его в необработанный List
), это может быть кандидат на обобщения.