Outra duvida,
quando se usa “intanceof” em um metodo equals como esse:
public boolean equals( Object o ) {
if ( ! ( o instaceof AlgumTipo ) ) {
return false;
}
return ( resultado da comparação dos objetos do mesmo tipo );
não estamos fazendo um atentado contra os bons padroes de orientação a objeto? Não teria com fazer isso generico usando polimorfismo, ou talvez usando reflexão ( que eu não sei se é muito aconselhavel )?
Minha principal duvida eh a seguinte: em que situações eu devo realmente usar intanceof?
Quando você quiser verificar se uma classe intancia outra e não se ela é igual a outra, por exemplo:
public class Car {
public Car( String marca ) {
}
}
public class Test {
public static void main( String[] args ) {
Object ferrari = new Car( "ferrari" );
if ( ferrari instanceof Car ) {
}
}
}
é interessante quando você tem um array de objetos como um ArrayList ou Vector que aceita qualquer tipo de objeto dentro dele. Nesse caso é conveniente testar cada elemento do array para saber o seu tipo antes de um objeto fazer referência a ele.
Exemplo:
Produto produto = new Produto();
Pedido pedido = null;
ArrayList lista = new ArrayList();
lista.add(produto);
pedido = (Pedido) lista.get(0);
// ERRO, pois um objeto do tipo Produto não pode ser convertido para Pedido