olá…
estou com uma duvida meia logica…rs…pra mim neh…rs
bom, eh o seguinte…estou tentando criar um array bi-dimencional onde neste array eu terei na primeira coluna valores do tipo de uma classe qualquer (ex Gato) e na outra coluna eu terie de outra classe (Cao)
bom, eh claro q o correto seria fazer assim:
Gato g[];
Cao c[];
mas ai me veio na cabeça q todas as classes são filhas da classe primitiva OBJECT, ai fiz o seguinte
Object animais[][];
deu pra saca a ideia??
mas não funciono…e eu queria sb o pq…
i otra coisa…existe como fazer arrays de varios tipos??
Não consigo imaginar muito bem como eh um array de varios tipos, criando um array de Object ja eh de certa forma um array de varios tipos (todos possiveis). O que vc quer dizer varios tipos? tipo na posição 0 é Gato, na 1 eh Cao, etc? isso não da hehe.
Mas se seus animais herdassem de uma classe Animal, cria um array de Animal, que ele soh aceitara animais hehe ou então usa List’s…
algumas sugestões, da uma testada, e se ainda der erro na inserção do array bi. fala ae… tem outras formas de se fazer
import java.util.ArrayList;
import java.util.List;
public class Teste {
abstract class Animal { }
class Cao extends Animal { }
class Gato extends Animal { }
class Entry<T1 extends Animal, T2 extends Animal> {
private T1 a1;
private T2 a2;
public Entry (T1 a1, T2 a2) {
this.a1 = a1;
this.a2 = a2;
}
public T1 getA1() { return a1; }
public T2 getA2() { return a2; }
}
public void y() {
Object[][] obj = new Object[2][2];
obj[0][0] = new String();
obj[0][1] = new Integer(1);
obj[1][0] = new Cao();
obj[1][1] = new Gato();
}
public void z() {
Animal[][] animais = new Animal[2][2];
animais[0][0] = new Cao();
animais[0][1] = new Gato();
// animais[1][0] = new String(); //erro (só aceita Animal)
// animais[1][1] = new Integer(1); //erro (só aceita Animal)
}
public void x() {
List<Animal> list = new ArrayList<Animal>();
list.add(new Cao());
list.add(new Gato());
// list.add(new String()); //erro (só aceita Animal)
}
public void k() {
List<Entry<Cao, Gato>> list = new ArrayList<Entry<Cao, Gato>>();
// list.add(new Entry<Cao, Gato>(new Gato(), new Cao())); //erro porque eu disse que eh Cao, Gato e passo Gato, Cao
list.add(new Entry<Cao, Gato>(new Cao(), new Gato()));
list.add(new Entry(new Gato(), new Cao())); // cuidado com essas coisas, não dei valores aos meus Generics T1 e T2 então ele assume qq animal, então passei Gato, Cao para uma lista de Entry's de Cao, Gato, mas nesses casos é aprensentado um warning
Entry<Cao, Gato> x = list.get(1);
Cao k = x.getA1(); // classCastException porque no segundo add eu passei um Entry com erro
}
}
List<Animal> list = new ArrayList<Animal>();
isso com Generics quer dizer que eh uma lista que só aceita objetos do tipo Animal. Esses < e > são Generic’s, tem que ter Java5, algumas pessoas não gostam, eu acho legal eheh mas não da para explicar tudo num topico, da uma lida em alguns tutoriais:
E da para criar um array do tipo Object, olha la o que eu tinha feito
public void y() {
Object[][] obj = new Object[2][2];
obj[0][0] = new String();
obj[0][1] = new Integer(1);
obj[1][0] = new Cao();
obj[1][1] = new Gato();
}
Isso chama-se polimorfismo, todas os elementos do array Object[], são do tipo Object, mas é possível inserir qualquer subtipo de Object nele, veja sobre polimorfismo em:
Em C isso não é possível porque C não é orientado a objetos, muito menos polimorfico.
sim, antes do java1.5 todas as ArrayList podia guardar objetos de vários tipos. E apartir do java1.5 pode-se cirar ArrayList especificas.
Agora, vc só tem que prestar atenção quando vc pegar o objeto da arrayList, vc tem que saber qual tipo de objeto vc ta pegando pra poder usar os metodos deles, a não ser que seja tudo herdado.