различные способы проверки типа объекта в Java? - PullRequest
2 голосов
/ 30 апреля 2010

У меня есть объект obj и имя класса MyClass , я могу проверить, имеет ли obj тип MyClass, используя instanceof или я могу сказать obj.getClass (). ("Мои занятия"). Поэтому я хочу знать, есть ли другие способы проверки типа объекта.

Ответы [ 7 ]

2 голосов
/ 30 апреля 2010

Осторожно: instanceof возвращает true также, если ваш объект является подклассом MyClass, или если он реализует интерфейс (обычно это то, что вас интересует - если вы вспоминаете концепцию ОО "IS A")

См. Также это о Class.isAssignableFrom(), аналогично instanceof, но немного более мощное.

2 голосов
/ 30 апреля 2010

Обратите внимание, что вы указываете следующие варианты: , а не эквивалент:

"foo" instanceof Comparable // returns true
"foo".getClass().equals(Comparable.class) // return false
1 голос
/ 30 апреля 2010

Class # isAssignableFrom (java.lang.Class) - еще один вариант.

0 голосов
/ 30 апреля 2010

Как говорили другие, instanceof не обладает такой же функциональностью, как equals.

С другой стороны, при решении этой проблемы в коде использование Visitor -pattern является чистым (хотя и не наименьшим в строках кода) решением. Приятным преимуществом является то, что после настройки интерфейса посетителя для набора классов его можно повторно использовать во всех других местах, где требуется обрабатывать все / некоторые / одно различные расширения класса.

0 голосов
/ 30 апреля 2010

Вы могли бы, вероятно, пройти через obj.getClass().getSuperClass(), чтобы получить нечто похожее на instanceof.

0 голосов
/ 30 апреля 2010

instancef не является правильным решением, поскольку оно дает истину для подкласса класса. Используйте это вместо:

 obj.getClass().equals("MyClass")
0 голосов
/ 30 апреля 2010

instanceof - это еще один вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...