GNO
Outubro 26, 2021, 5:35pm
#1
Estou tentando comparar um enum para adicionar somente se o ENUM estiver como “L”, porém não consigo fazer essa comparação, já tentei de N formas e nenhuma entra no IF, segue oq eu tentei agora.
LinkedList<Mecanico> retorno = new LinkedList<>();
for (Mecanico mecanico : listaMecanicos) {
if (mecanico.getSituacao().L.equals(Situacao.L)) {
retorno.add(mecanico);
}
}
return retorno;
Enum:
O("Ocupado"), L("Disponível");
private String descricao;
private Situacao(String descricao) {
this.descricao = descricao;
}
Quando vc compara enums, pode comparar diretamente com ==
, ficaria assim:
import java.util.LinkedList;
import java.util.List;
public class Main {
public static void main(String... args) {
enum Situacao {
O("Ocupado"), L("Disponível");
private String descricao;
private Situacao(String descricao) {
this.descricao = descricao;
}
}
class Mecanico {
private String nome;
private Situacao situacao;
Mecanico(String nome, Situacao situacao) {
this.nome = nome;
this.situacao = situacao;
}
Situacao getSituacao() {
return this.situacao;
}
@Override
public String toString() {
return this.nome;
}
}
List<Mecanico> listaMecanicos = new LinkedList<>();
listaMecanicos.add(new Mecanico("João", Situacao.O));
listaMecanicos.add(new Mecanico("Pedro", Situacao.L));
listaMecanicos.add(new Mecanico("José", Situacao.O));
listaMecanicos.add(new Mecanico("Marcos", Situacao.L));
LinkedList<Mecanico> retorno = new LinkedList<>();
for (Mecanico mecanico : listaMecanicos) {
if (mecanico.getSituacao() == Situacao.L) {
retorno.add(mecanico);
}
}
System.out.println(retorno);
}
}
2 curtidas
GNO:
getSituacao().L.
getSituacao()
retorna um dos valores do enum (que pode ser O
ou L
), então esse .L
está errado, basta retirá-lo (ficaria if (mecanico.getSituacao().equals(Situacao.L))
).
Mas como já foi dito acima, enums podem ser comparados com ==
(com equals
também funcionará, já que o método equals
de um enum internamente usa o operador ==
).
1 curtida
GNO
Outubro 26, 2021, 7:57pm
#4
Sim, eu já tentei com getSituacao.equals(Situacao.L) ou com o == mas mesmo assim ele não cai dentro do IF.
GNO
Outubro 26, 2021, 8:00pm
#5
GNO:
Situacao
É algo na comparação, pois já tentei passando direto com return, e ela retorna de boa o que eu digitei no Dialog.
Tem como vc mostrar a classe Mecanico
?
GNO
Outubro 26, 2021, 8:17pm
#8
public class Mecanico extends Pessoa{
private Situacao situacao;
public Mecanico(){
super();
this.setSituacao(situacao.L);
}
public Mecanico(String nome, String cpf, Situacao situacao){
super(nome, cpf);
this.setSituacao(situacao);
}
public Situacao getSituacao() {
return situacao;
}
public void setSituacao(Situacao situacao) {
this.situacao = situacao;
}
@Override
public String toString() {
return super.getNome();
}
Parece tudo certo. E aquela listaMecanicos
, será que ela foi preenchida corretamente?
GNO
Outubro 26, 2021, 8:24pm
#10
Creio que sim, pois se não tivesse certo não retornaria nem se eu colocasse o return direto, porém retorna.
private static LinkedList<Mecanico> listaMecanicos = new LinkedList<>();
GNO
Outubro 26, 2021, 8:31pm
#11
Assim é feita a alimentação no dialog:
Mecanico mecanico = new Mecanico(jTFNome.getText(), jFTFCPF.getText(), jRBDisp.isSelected() ? Situacao.L : Situacao.O);
Dados.getListaMecanicos().add(mecanico);
getListaMecanicos é onde está a condição
Eu só consigo pensar que o problema está em outro lugar.
Se vc fez como eu e o Hugo dissemos, então, então a condição deveria funcionar.
Acho que seria bom ir rodando o programa colocando ums println
ou uns breakpoints para acompanhar a execução.
GNO
Outubro 26, 2021, 8:43pm
#13
É o jeito, pois olhando por cima não tem nada errado.
GNO
Outubro 26, 2021, 8:50pm
#14
Acho que descobri, depois de ficar um tempo analisando vi que tem algo suspeito. Vou corrigir e mando um feedback
Maravilha. Quero saber o fim deste mistério.