Povo,dei uma pesquisada nos fóruns sobre isso,mas ainda não peguei a idéia.É tipo um == pra classes e objetos?
Qual é a real utilidade disso?Tipo…se eu tiver,por qq motivo,que passar um objeto como argumento de função…pq usar o instanceof,se,quando eu escrever o codigo,ao passar um objeto errado na chamada de função,o compilador já vai acusar o erro devido à diferença de tipos entre o argumento da chamada e o do protótipo?
Tá meio enrolado de explicar…Mas o livro Java in a Nutshell também nao diz muito.Só tem um exemplo com um if,mas aqui vi uns códigos com return (B instanceof A)…
Bom, o instanceof serve para verificar em tempo de execução se um objeto faz parte da hierarquia de uma determinada classe... vou tentar te dar um exemplo prático sobe isto.
Suponha que, usando Java 4, vc tenha um List de objetos, mas vc não sabe o que pode estar dentro deste list, então para fazer uma determinado procedimento vc pega cada item deste list e verifica se é do objeto que vc sabe tratar.. por exemplo:
Listlist=newArrayList();preencheList(list);// aqui vamos supor que vc preenche o list com alguns objetos...tratalist(list);//aqui vc vai tratar o list...publicvoidtrataList(Listlist){for(inti=0;i<list.size();i++){Objectob=list.get(i);if(obinstanceofString){trataString((String)ob);}...}
Neste caso eu verifiquei se o objeto era uma instancia de String, para quando for fazer o Cast não dar erro...
Ele básicamente serve para isto.
J
jaireltonPJ
pq usar o instanceof,se,quando eu escrever o codigo,ao passar um objeto errado na chamada de função,o compilador já vai acusar o erro devido à diferença de tipos entre o argumento da chamada e o do protótipo?
Sim, mas veja esse exemplo:
publicclassAnimal{}publicclassGatoextendsAnimalimplementsSerializable{}publicclassCaoextendsAnimal{}publicclassTeste{publicstaticvoidmain(String[]args){metodo1(newGato());metodo1(newCao());isSerializable(newGato());isSerializable(newCao());}publicstaticvoidmetodo1(Animalan){if(aninstaceofGato){System.out.println("É um gato...");}if(aninstanceofCao){System.out.println("É um cão...");}}publicvoidisSerializable(Objectobj){if(objinstaceofSerializable){System.out.println("É serializavel...");}else{System.out.println("Não é serializavel...");}}
Um uso comum pra isso é não implementação do método equals(), veja:
O operador instanceof serve para verificar se determinado objeto é uma instancia de um determinado tipo (classe ou interface).
É usado quando o argumento apresenta polimorfismo e é necessário destingir entre as várias hipoteses.
Deve ser usado, por exemplo, na implementação de equals(Object) para certificar que o objeto passado é da mesma classe do objeto em teste.