Mas, de qualquer forma, na solução proposta pelo roberto, me parece estranho ter um método getSexo(String sexo), que na verdade faz o papel de um setSexo.
Outra coisa que me parece estranha é que o outro método getSexo() retorna boolean, se ele é um método de validação, eu acho que deveria chamar validaSexo.
Também faltou validar se o valor passado é M ou F, ou um outro valor errado…
Por alto, eu acho que você deveria ter um método validaSexo que poderia por exemplo lancar uma “SexoException” caso o valor atribuido fosse em branco ou diferente de M e F.
Este método seria utilizado pelo seu setSexo para validar o valor recebido.
Uma outra forma de fazer isso, bem interessante, que pode ser aplicada em qualquer caso onde os valores são predefinidos. Não é exatamente o que você quer, mas pode te servir no futuro:
enum Sexo {
INVALIDO("", "Inválido"),
MASCULINO("M", "Masculino"),
FEMININO("F", "Feminino");
Sexo(String tag, String descricao) {
this.tag = tag;
this.descricao = descricao;
}
public String getTag() {
return tag;
}
public getDescricao() {
return descricao;
}
public static Sexo fromTag(String tag) {
for (Sexo sexo : Sexo.values())
if (sexo.getTag().equals(tag))
return sexo;
return INVALIDO;
}
public boolean valido() {
return this != INVALIDO;
}
public String toString() {
return getDescricao();
}
}
Não é o caso aqui (bom, depente, hehe), mas dessa forma sua lista de valores pode aumentar ou diminuir, sem que seja necessária qualquer alteração na classe, além, claro, das contantes do enum.
Usa-se assim:
(...)
Sexo sexo = Sexo.fromTag("F");
System.out.println(sexo); //saída: "Feminino"
(...)
Sexo sexo = Sexo.fromTag("G");
if (!sexo.valido())
System.out.println("Olá, bom dia! Eu admiro sua coragem, mas precisamos de M ou F."); //evita processo por discriminação;
else
System.out.println(String.format("Valor OK: %s", sexo.getDescricao()));
(...)
Acho melhor inverter a lógica. Armazene o sexo como boolean, e evite coisas como validaSexo:
[code]public class Sexo
{
public boolean masculino;
public Sexo(boolean masculino) {
this.masculino = masculino;
}
public Sexo(char letra) {
setSexo(letra);
}
public final setMasculino(boolean masculino) {
this.masculino = masculino;
}
public final setFeminino(boolean feminino) {
setMasculino(!feminino);
}
//Método de conveniência.
//Eu sinceramente não colocaria esse método na classe.
public final setSexo(char letra) {
if (letra == ‘M’ || letra == ‘m’)
masculino = true;
else if (letra == ‘F’ || letra == ‘f’)
masculino = false;
//Ou criar uma SexoException, filha dessa, como falou o colega
throw new IllegalArgumentException(“Sexo inválido!”);
}
public boolean isMasculino() { return masculino; }
public boolean isFeminino() { return feminino; }
public String getSigla() { return masculino ? “M” : “F”; }
public String getDescricao() { return masculino ? “Masculino” : “Feminino”; }
public String toString() { return getDescricao(); }
@Override
public boolean equals(Object outro) {
if (outro.getClass() != Sexo.class) return false;
return ((Sexo)outro).masculino == masculino;
}
@Override
public int hashCode() { return masculino ? 0 : 1; }
}[/code]