Я хочу проверить, является ли объект o
экземпляром класса C
или подкласса C
.
Например, если p
имеет класс Point
я хочу x.instanceOf(Point.class)
быть , true
а также x.instanceOf(Object.class)
быть true
.
Я хочу, чтобы это работало также для примитивных типов в штучной упаковке. Например, если x
есть, Integer
то x.instanceOf(Integer.class)
должно быть true
.
Что-то подобное существует? Если нет, как я могу реализовать такой метод?
java
reflection
instanceof
змея
источник
источник
Ответы:
Class.isInstance делает то, что вы хотите.
if (Point.class.isInstance(someObj)){ ... }
Конечно, вы не должны использовать его, если можете использовать
instanceof
вместо этого, но для сценариев отражения он часто бывает полезен.источник
if (a instanceof Point)
- но вы делаете это более запутанным способом, тот, кто читает код, обязательно подумает: «О, должна быть причина, по которой это делается трудным путем», и затем перейдите к документации, чтобы узнать, чемClass.isInstance
отличается отinstanceof
. Вы тратите время своих коллег.Гм ... Что? Что такое o, p и x?
Нет. Он даже не должен компилироваться. Примитивы не являются объектами, и вы не можете вызывать для них методы.
В любом случае, есть три вещи, одна из которых может определенно достичь того, чего вы хотите (они несколько различаются в том, где именно применяется:
instanceof
Оператором , если вы знаете , класс во время компиляции.источник
x instanceof Integer x instanceof Object
вам просто нужно использовать правильный синтаксис
для примитивных типов это нужно делать совершенно иначе. Поскольку вы не можете создавать для них методы, вам нужен класс, который хранит метод. Поэтому вместо «x.instanceOf (Integer.Class)» вы должны вызвать «MyClassComparer.instanceOf (x, Integer.Class)» или что-то в этом роде. Это можно легко реализовать с помощью методов перегрузки, но я не вижу случая, когда такая функциональность вообще была бы желательна.
источник
Фактически в Java есть логический оператор instanceof, который можно использовать для определения того, является ли объект экземпляром класса, экземпляром подкласса или экземпляром класса, реализующего конкретный интерфейс.
if(obj instanceof SomeClass) { // Do something }
В руководстве по Java есть хороший пример этого оператора.
источник
Ты можешь сделать:
if (foo instanceof classNameYouWantToCheck)
источник
«Я хочу, чтобы это работало также для примитивных типов. Например, если x является целым числом, тогда x.instanceOf (Integer.class), а также x.instanceOf (Object.class) должны быть истинными».
Зачем? Примитивные типы и ссылочные типы полностью разделены. Примитивный int не является подтипом Integer или Object. Тип примитивного значения всегда известен статически во время компиляции, поэтому нет смысла проверять его тип. Конечно, вы можете упаковать примитивное значение, а затем проверить его тип:
(Integer)5 instanceof Integer
Но какой в этом смысл?
источник
Я думаю, вы смущены instanceof для необработанных объектов и общих
obj instanceof Class obj instanceof Class<?> // this is the one you want
источник
instanceof
.