Qual a maneira mais elegante de fazer isso?

2 respostas
Don

olá amigos

estou desenvolvendo um componente para utilizar em workflows e me deparei com a seguinte situação:

O usuário do componente vai digitar 2 valores, em uma combo vai escolher o tipo desses valores(String, Integer, Double) e em outra combo vai escolher a comparação que ele quer fazer com esses valores(=,!=,>,<,>=,<=). Como posso fazer isso sem fazer um monte de if? (tinha feito um estrategy mas achei que não ficou bom)…

Enfim como vocês fariam isso?

grato

2 Respostas

P

Uma espécie de Command:

public interface Operacao {
	public boolean executar();
}
public class Diferente implements Operacao {

	private Object value1;
	private Object value2;

	public Diferente(Object value1, Object value2) {
		this.value1 = value1;
		this.value2 = value2;
	}

	public boolean executar() {
		return (!value1.equals(value2));
	}
}
public class Igual implements Operacao {

	private Object value1;
	private Object value2;

	public Igual(Object value1, Object value2) {
		this.value1 = value1;
		this.value2 = value2;
	}

	public boolean executar() {
		return (value1.equals(value2));
	}
}
public class Teste {
	public static void main(String[] args) {
		// usuário escolheu Igual
		Class operacao = Igual.class;
		// usuário escolheu Double
		Class tipo = Double.class;
		// usuário digitou dois valores
		String value1 = "15";
		String value2 = "25";
		try {
			Object value1Double = tipo.getConstructor(new Class[] { String.class })
					.newInstance(new Object[] { value1 });
			Object value2Double = tipo.getConstructor(new Class[] { String.class })
					.newInstance(new Object[] { value2 });
			Operacao operacaoObj = (Operacao) operacao.getConstructor(new Class[] { Object.class, Object.class })
					.newInstance(new Object[] { value1Double, value2Double });
			System.out.println(operacaoObj.executar());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
wbdsjunior

você pode usar CajuScript ou outros.

Criado 24 de novembro de 2009
Ultima resposta 24 de nov. de 2009
Respostas 2
Participantes 3