Как определить класс объекта?

Если вы смотрите на события мыши / касания, Патрик Х. Лауке опубликовал разговор по этому вопросу . Определенно интересное чтение - и касается всех причуд разных браузеров, разных устройств и разных стандартов.

Он также связывает полный набор тестов .

477
задан Lii 22 January 2018 в 20:30
поделиться

5 ответов

if (obj instanceof C) {
//your code
}
762
ответ дан Michael Myers 23 January 2018 в 06:30
поделиться
  • 1
    Я хотел бы видеть код для этого, если Вы могли бы совместно использовать. – User 12345678 20 October 2013 в 08:07

Используйте Object.getClass () . Это возвращает тип выполнения объекта.

329
ответ дан Bill the Lizard 23 January 2018 в 06:30
поделиться

Можно использовать:

Object instance = new SomeClass();
instance.getClass().getName(); //will return the name (as String) (== "SomeClass")
instance.getClass(); //will return the SomeClass' Class object

HTH. Но я думаю большую часть времени, что это не хорошая практика для использования этого для потока управления или чего-то подобного...

31
ответ дан Johannes Weiss 23 January 2018 в 06:30
поделиться

Любое использование любого из предложенных методов считают запахом кода, который базируется в плохом дизайне OO.

, Если Ваш дизайн хорош, Вы не должны должными быть для использования getClass() или instanceof.

Любой из предложенных методов сделает, но просто что-то для учета, мудрый дизайном.

24
ответ дан Yuval Adam 23 January 2018 в 06:30
поделиться
  • 1
    @ByteBlast - Контейнером я просто имею в виду класс что mananges набор mListOfRegisteredHandlers. Таким образом, в основном класс, который имеет, добавляет/удаляет функции-обработчики и возможно сделал бы, чтобы помощник функционировал позвонивший DispatchMessage(IMessage msg), который циклично выполнился бы через список mListOfRegisteredHandlers и вызов msg.Dispatch(handler) (последний фрагмент кода в моем ответе). – SwDevMan81 21 October 2013 в 23:31

Существует также .isInstance метод на" Class" класс. если Вы получаете класс объекта через myBanana.getClass(), Вы видите, является ли Ваш объект myApple экземпляром того же класса как myBanana через

myBanana.getClass().isInstance(myApple)
13
ответ дан Sk8erPeter 23 January 2018 в 06:30
поделиться
  • 1
    Это дополнение MessageProcessor является хорошей альтернативой. +1 – bruno conde 26 September 2009 в 01:24
Другие вопросы по тегам:

Похожие вопросы: