Более простой и быстрый код:
if (myObject instanceof B) {
} else if (myObject instanceof C) {
} else if (myObject instanceof A) {
}
Обратите внимание, что порядок важен: вам нужно пройти тест для A
last, так как он будет успешным и для экземпляров B
и C
.
Однако ваш оригинальный код почти сработает. Class.isInstance
проверяет, действительно ли значение является экземпляром данного класса или любого суперкласса. Так что если myObject
является экземпляром C
, то B.class.isInstance(myObject)
вернет false. Все, что вы ошибаетесь, это то, что вы звоните getClass()
на myObject
без необходимости, вместо использования B.class
и т. Д.
Это подход, который вы бы использовали, если бы вы не знали, какие классы вас интересовали во время компиляции - оператор instanceof
работает только тогда, когда вы можете указать тип статически в коде.
Теперь, если вы хотите выяснить, является ли myObject
экземпляром точно B
(а не подклассом), просто используйте:
if (myObject.getClass() == B.class)
(Это взорвется, если myObject
будет нулевой ссылкой, конечно.)