Есть что-то вроде instanceOf (class C) в Java?

Я хочу проверить, является ли объект o экземпляром classа C или подclassа C

Например, если p является classом Point я хочу, чтобы x.instanceOf(Point.class) был true а также x.instanceOf(Object.class) чтобы быть true .

Я хочу, чтобы он работал также для примитивных типов в штучной упаковке. Например, если x является целым x.instanceOf(Integer.class) тогда x.instanceOf(Integer.class) должно быть true .

Что-то подобное существует? Если нет, как я могу реализовать такой метод?

Class.isInstance делает то, что вы хотите.

 if (Point.class.isInstance(someObj)){ ... } 

Конечно, вы не должны использовать его, если вы можете использовать instanceof вместо этого, но для сценариев отражения это часто пригодится.

Я хочу проверить, является ли объект o экземпляром classа c или подclassа c. Например, если p является classом Point, я хочу x.instanceOf (Point.class)

Хм … Что? Что такое o, p и x?

Я хочу, чтобы он работал и для примитивных типов. Например, если x является целым числом, тогда x.instanceOf (Integer.class), а также x.instanceOf (Object.class) должно быть истинным.

Нет. Он даже не компилируется. Примитивы не являются объектами, и вы не можете вызывать методы на них.

Во всяком случае, есть три вещи, одна из которых может определенно достигать того, чего вы хотите (они несколько отличаются друг от друга тем, где именно применяются:

  • Оператор instanceof если вы знаете class во время компиляции.
  • Class.isInstance (), если вы хотите проверить class объекта против classа, не известного во время компиляции.
  • Class.isAssignableFrom (), если вы хотите проверить назначаемость, заданную двумя объектами classа.
 x instanceof Integer x instanceof Object 

вам просто нужно использовать правильный синтаксис

для примитивных типов, вы должны сделать это совершенно иначе. Поскольку вы не можете создавать методы для них, вам нужен class, поддерживающий метод. Поэтому вместо «x.instanceOf (Integer.Class)» вы должны вызвать «MyClassComparer.instanceOf (x, Integer.Class)» или что-то в этом роде. Это может быть легко реализовано с помощью методов перегрузки, но я не вижу случая, когда эта функциональность будет желательна вообще.

Фактически в Java существует логический оператор, называемый instanceof, который может использоваться для определения того, является ли объект экземпляром classа, экземпляром подclassа или экземпляром classа, реализующего определенный интерфейс.

 if(obj instanceof SomeClass) { // Do something } 

Хороший пример этого оператора Java Tutorial

Ты можешь сделать:

 if (foo instanceof classNameYouWantToCheck) 

«Я хочу, чтобы он работал и для примитивных типов. Например, если x является целым числом, тогда x.instanceOf (Integer.class), а также x.instanceOf (Object.class) должно быть истинным».

Зачем? Примитивные типы и ссылочные типы полностью разделены. Примитивный int не является подтипом Integer или Object. Тип примитивного значения всегда известен статически во время компиляции, поэтому нет смысла тестировать его тип. Конечно, вы можете ввести примитивное значение, а затем проверить его тип:

 (Integer)5 instanceof Integer 

Но в чем смысл?

Я думаю, вы запутались в том, что для raw-объектов и общих

 obj instanceof Class obj instanceof Class // this is the one you want 
  • Более быстрые альтернативы отражению Java
  • Проверьте, существует ли свойство в classе
  • Создание объекта типа параметра
  • Разница между загрузкой classа с использованием ClassLoader и Class.forName
  • Есть ли способ установить свойства на экземплярах структуры с помощью отражения?
  • C # Reflection - Получить значения полей из простого classа
  • Быстрое создание объектов вместо Activator.CreateInstance (type)
  • Как создать экземпляр из строки в C #?
  • Отражение Java: как я могу получить анонимные внутренние classы?
  • Использование отражения в C # для получения свойств вложенного объекта
  • C # reflection - загрузить сборку и вызвать метод, если он существует
  • Давайте будем гением компьютера.