Quero verificar se um objeto o
é uma instância da classe C
ou de uma subclasse de C
.
Por exemplo, se p
é de classe Point
quero x.instanceOf(Point.class)
ser true
e também x.instanceOf(Object.class)
ser true
.
Quero que funcione também para tipos primitivos encaixotados. Por exemplo, se x
é um, Integer
então x.instanceOf(Integer.class)
deveria ser true
.
Existe uma coisa dessas? Se não, como posso implementar esse método?
java
reflection
instanceof
serpenteante
fonte
fonte
Respostas:
Class.isInstance faz o que você deseja.
if (Point.class.isInstance(someObj)){ ... }
Claro, você não deveria usá-lo se pudesse
instanceof
, mas para cenários de reflexão, ele geralmente é útil.fonte
if (a instanceof Point)
- mas você faz de uma forma mais complicada, quem lê o código está fadado a pensar "ah, deve haver uma razão para que isso seja feito da maneira mais difícil", e em seguida, vá para a documentação para descobrir comoClass.isInstance
é diferente deinstanceof
. Você desperdiça o tempo dos seus colegas.Hum ... O quê? O que são o, pe x?
Não. Ele nem deveria compilar. Primitivos não são objetos e você não pode chamar métodos neles.
De qualquer forma, existem três coisas, uma das quais pode definitivamente alcançar o que você deseja (eles diferem um pouco em onde exatamente se aplicam:
instanceof
operador se você conhece a classe em tempo de compilação.fonte
x instanceof Integer x instanceof Object
você apenas tem que usar a sintaxe certa
para tipos primitivos, você deve fazer isso de maneira completamente diferente. Visto que você não pode criar métodos para eles, você precisa de uma classe que mantenha o método. Portanto, em vez de "x.instanceOf (Integer.Class)", você deve chamar "MyClassComparer.instanceOf (x, Integer.Class)" ou algo parecido. Isso poderia ser facilmente implementado por métodos de sobrecarga, mas não consigo ver um caso em que essa funcionalidade seja desejável.
fonte
Na verdade, em Java há um operador booleano chamado instanceof, que pode ser usado para determinar se um objeto é uma instância de uma classe, uma instância de uma subclasse ou uma instância de uma classe que implementa uma interface específica.
if(obj instanceof SomeClass) { // Do something }
O Tutorial Java tem um bom exemplo desse operador
fonte
Você pode fazer:
if (foo instanceof classNameYouWantToCheck)
fonte
"Eu quero que funcione também para tipos primitivos. Por exemplo, se x for um inteiro, então x.instanceOf (Integer.class) e também x.instanceOf (Object.class) deve ser verdadeiro."
Por quê? Tipos primitivos e tipos de referência são completamente separados. Um int primitivo não é um subtipo de Integer nem Object. O tipo de um valor primitivo é sempre conhecido estaticamente em tempo de compilação, portanto, não há motivo para testar seu tipo. Claro, você pode encaixotar um valor primitivo e testar seu tipo:
(Integer)5 instanceof Integer
Mas qual seria o ponto?
fonte
Acho que você está confuso sobre a instância de objetos brutos e genéricos
obj instanceof Class obj instanceof Class<?> // this is the one you want
fonte
instanceof
.