Gostaria que me dessem dicas para melhorar o seguinte codigo, tal como para nao repetir o mesmo codigo em todos os valores da enum. Penso que receber dicas me ajudará a melhorar. Obrigado
public enum Tarifas {
JANEIRO(30, 2.5, 5) {
@Override
public BigDecimal getPreco(int pax, String entrada, String saida, String APT) {
int diaEntrada = Integer.parseInt(entrada.substring(0, 2));
int diaSaida = Integer.parseInt(saida.substring(0, 2));
BigDecimal paxDecimal = getPaxDecimal(pax, APT);
BigDecimal preco = new BigDecimal(getPrecoInicial());
final BigDecimal ADD = new BigDecimal(getPessoaAlteracao());
BigDecimal addT2 = new BigDecimal(0);
if (APT == "T2"){
addT2 = new BigDecimal(getPessoaAlteracao());
}
preco = preco.add((addT2.add(paxDecimal.multiply(ADD))));
preco = preco.multiply(new BigDecimal(diaSaida-diaEntrada));
return preco;
}
}
, FEVEREIRO(30, 2.5, 5) {
@Override
public BigDecimal getPreco(int pax, String entrada, String saida, String APT) {
int diaEntrada = Integer.parseInt(entrada.substring(0, 2));
int diaSaida = Integer.parseInt(saida.substring(0, 2));
BigDecimal paxDecimal = getPaxDecimal(pax, APT);
BigDecimal preco = new BigDecimal(getPrecoInicial());
final BigDecimal ADD = new BigDecimal(getPessoaAlteracao());
BigDecimal addT2 = new BigDecimal(0);
if (APT == "T2"){
addT2 = new BigDecimal(getPessoaAlteracao());
}
preco = preco.add((addT2.add(paxDecimal.multiply(ADD))));
preco = preco.multiply(new BigDecimal(diaSaida-diaEntrada));
return preco;
}
}, MARÇO(30, 2.5, 5) {
@Override
public BigDecimal getPreco(int pax, String entrada, String saida, String APT) {
return null;
}
}, ABRIL(35, 2.5, 5) {
@Override
public BigDecimal getPreco(int pax, String entrada, String saida, String APT) {
return null;
}
}, MAIO(35, 2.5, 5) {
@Override
public BigDecimal getPreco(int pax, String entrada, String saida, String APT) {
return null;
}
}, JUNHO(2,2,2) {
@Override
public BigDecimal getPreco(int pax, String entrada, String saida, String APT) {
return null;
}
}, JULHO(37.5, 5,5) {//ALTERAR
@Override
public BigDecimal getPreco(int pax, String entrada, String saida, String APT) {
return null;
}
}, AGOSTO(2,2,2) {//ALTERAR
@Override
public BigDecimal getPreco(int pax, String entrada, String saida, String APT) {
return null;
}
}, SETEMBRO(2,2,2) {//ALTERAR
@Override
public BigDecimal getPreco(int pax, String entrada, String saida, String APT) {
return null;
}
}, OUTUBRO(35, 2.5, 5) {
@Override
public BigDecimal getPreco(int pax, String entrada, String saida, String APT) {
return null;
}
}, NOVEMBRO(30, 2.5, 5) {
@Override
public BigDecimal getPreco(int pax, String entrada, String saida, String APT) {
return null;
}
}, DEZEMBRO(30, 2.5, 5) {
@Override
public BigDecimal getPreco(int pax, String entrada, String saida, String APT) {
return null;
}
};
private double precoInicial;
private double pessoaAlteracao;
private double TAlteracao;
private Tarifas(double precoInicial, double pessoa, double alteracao) {
this.precoInicial = precoInicial;
this.pessoaAlteracao = pessoa;
this.TAlteracao = alteracao;
}
public static int getMesNum(Tarifas mes){
return mes.ordinal();
}
public static String getMes(int i){
return Tarifas.values()[i].name();
}
public abstract BigDecimal getPreco(int pax, String entrada, String saida, String APT);
public static BigDecimal getPrecoMes(int mes, int pax, String entrada, String saida, String APT){
int entradaMes = Integer.parseInt(entrada.substring(3,5));
int saidaMes = Integer.parseInt(saida.substring(3,5));
if (entradaMes == saidaMes){
return Tarifas.values()[mes-1].getPreco(pax, entrada, saida, APT);
}else{
System.out.println("Dif");
Calendar cal = Calendar.getInstance();
int diaMax = cal.getActualMaximum(entradaMes);
saida = diaMax + "/" + entradaMes + "/" + entrada.substring(6,10);
BigDecimal preco1 = Tarifas.values()[mes-1].getPreco(pax, entrada, saida, APT);
entrada = 1 + "/" + saidaMes + "/" + entrada.substring(6,10);
BigDecimal preco2 = Tarifas.values()[mes-1].getPreco(pax, entrada, saida, APT);
return preco1.add(preco2);
}
}
private static BigDecimal getPaxDecimal(int pax, String apt) {
if (apt == "T1"){
if (pax < 2){
pax = 2;
}
}else{
if (pax < 4){
pax = 4;
}
}
pax -=1;
BigDecimal paxDecimal = new BigDecimal(pax);
return paxDecimal;
}
//GETTERS AND SETTERS
}
PS: O metodo getPrecoMes
é provisorio