int i=4;
double d=12.27;
String s="Texto";
ArrayList a=new ArrayList();
a.add(i);
a.add(d);
a.add(s);
for(int i=0;i<a.size();i++){
if(a.get(i) FOR_UM_DOUBLE){
System.out.println("Eh um double...");
}else{
//PRA CADA TIPO DE VARIAVEL MOSTRARIA A MENSAGEM DIZENDO O TIPO DESTA VARIAVEL
}
}
Como posso fazer isso?
if ( a.get(i) instanceof Double ) ...
Sò tome cuidado. Você não deve colocar tudo e qualquer coisa dentro da mesma lista.
O ideal é colocar classes da mesma hierarquia para poder usar polimorfismo caso necessário.
Outro ponto importante é usar genéricos para especializar sua lista.
[]'s
Para obter o nome da classe de um objeto:
obj.getClass().getName();
Tome cuidado pois seu programa também realiza algumas conversões de tipo implícitas (AutoBoxing). No fundo ele faz isso aqui:
[code] int i= 4;
double d= 12.27;
String s = “Texto”;
ArrayList a=new ArrayList();
a.add(Integer.valueOf(i));
a.add(Double.valueOf(d));
a.add(s);
for(int i=0;i<a.size();i++){
if(a.get(i) instanceof Double){
System.out.println("Eh um Double...");
}else{
System.out.println(a.get(i).getClass().getName());
}
}
[/code]
Para comprovar o que estou falando, teste:[code]
Double x1 = 12.5;
double x2 = 12.5;
if (x1.getClass() == x2.getClass())
System.out.println(“Double e double pertencem a mesma classe.”);
else
System.out.println(“Double e double não pertencem a mesma classe.”);
List lista = new ArrayList();
lista.add(x2);
if (x1.getClass() == lista.get(0).getClass())
System.out.println(“Na lista, um objeto Double foi automaticamente criado para x2.”);
else
System.out.println(“Na lista podem existir variáveis do tipo double”);
[/code]
>
Mas também reforço o que o David falou. Geralmente, um ArrayList contém variáveis apenas de um tipo, ou filhos de um tipo. É importante saber o que esperar do get, sem ficar testando coisas. E o ideal é declara-lo já indicando esse tipo:
List<String> lista = new ArrayList<String>();
[quote=davidbuzatto]if ( a.get(i) instanceof Double ) ...
Sò tome cuidado. Você não deve colocar tudo e qualquer coisa dentro da mesma lista.
O ideal é colocar classes da mesma hierarquia para poder usar polimorfismo caso necessário.
Outro ponto importante é usar genéricos para especializar sua lista.
[]'s[/quote]
[quote=ViniGodoy]Para obter o nome da classe de um objeto:
obj.getClass().getName();
Mas também reforço o que o David falou. Geralmente, um ArrayList contém variáveis apenas de um tipo, ou filhos de um tipo. É importante saber o que esperar do get, sem ficar testando coisas. E o ideal é declara-lo já indicando esse tipo:
List<String> lista = new ArrayList<String>();
Como seria declarar para um ArrayList para manipular mais de um tipo de variável? se colocar [color=red] List lista = new ArrayList();[/color][color=#444444] funciona? No caso de eu precisar adicionar ao ArrayList uma variável String,int e char. Como eu faria?
Vi algo também declarando Object (Ex:[/color] [color=red]List <Object> lista = new ArrayList <Object>();[/color] [color=#444444] ) o que seria o Object?
No caso de mais de uma variável tenho algo aqui declarando[/color] [color=red] List <Pessoa> lista = new ArrayList<Pessoa>();[/color][color=#444444]
Pessoa no caso é uma outra classe, que guarda os dados de pessoa.[/color]
O ArrayList vai permitir variáveis de um tipo, ou dos filhos dele. Se você quiser o ArrayList mais abrangente de todos, basta criar um ArrayList<Object>():
List<Object> lista = new ArrayList<>();
Isso permitirá que você insira tipos diversos, por exemplo:
list.add("Olá!");
list.add(Integer.valueOf(1000));
list.add(new MeuObjeto());
Entretanto, isso torna o uso da lista inconveniente, já que você terá que testar o tipo específico:
if (list.get(0) instanceof Integer) {
//Faz algo
}
E, portanto, é uma má prática. Se você está sentindo essa necessidade, reveja a modelagem do seu sistema, pois está problemática.
Na verdade, colocar o tipo entre as <> foi um recurso que surgiu no Java 5, justamente porque antes, todas as listas se comportavam como se fossem List().
obrigado ViniGodoy, é que estou começando a estudar ArrayList e surgem muitas dúvidas. Estou usando ArrayList para cadastro de pessoas em um formulário a melhor prática então seria um ArrayList para cada tipo de dado? Por exemplo estou criando uma rede social fictícia para um projeto da faculdade tenho uma classe cadastroPessoa com o JFrame do formulário com todos botões,objetos e eventos sendo ligada a outra classe pessoaFisica com os atributos e métodos de uma pessoa. No meu caso é melhor o ArrayList estar na classe cadastroPessoa junto com o JFrame e os eventos ou em pessoaFisica junto com os dados, atributos e métodos?
Por enquanto esta instanciado na classe cadastroPessoa junto com o JFrame da seguinte forma:
List <pessoaFisica> cadastroPf = new ArrayList <pessoaFisica> ();
que se não me engano seria um objeto estático certo?
e logo abaixo:
cadastroPf.add(new pessoaFisica (datnasc,sex,cepe,reg,end,numc,cid,
est,tel,cel,face,twi,rep));
seria esse o modo mais correto de se fazer essa transição de dados? ou enviando ao método construtor da classe pessoaFisica?
[quote=ViniGodoy]Entretanto, isso torna o uso da lista inconveniente, já que você terá que testar o tipo específico:
if (list.get(0) instanceof Integer) {
//Faz algo
}[/quote]
O que seria tornar o uso da lista inconveniente?
Desde já, obrigado pela atenção Vini!