我需要转换Request类中的许多(但不是全部)对象字段,并且我试图以一种很好的方式进行。不时需要转换的字段正在发生变化。
这就是Request类的样子:
public class Request {
private FinancialParameters financialParameters;
private AdditionalParameters additionalParameters;
}
public class FinancialParameters {
private BigDecimal financialParam1;
private BigDecimal financialParam2;
(...)
private BigDecimal financialParam99;
private BigDecimal financialParam100;
}
public class AdditionalParameters {
private BigDecimal additionalParam1;
private BigDecimal additionalParam2;
(...)
private BigDecimal additionalParam99;
private BigDecimal additionalParam100;
}
这就是我现在正在做的事情。这需要数百行代码。并且很难毫无错误地改变转换后的字段。
class ParamConverter {
public Request convert(Request request){
request.getFinancialParameters().setFinancialParam1(convert(request.getFinancialParameters().getFinancialParam1()));
request.getFinancialParameters().setFinancialParam3(convert(request.getFinancialParameters().getFinancialParam3()));
request.getFinancialParameters().setFinancialParam5(convert(request.getFinancialParameters().getFinancialParam5()));
request.getFinancialParameters().setFinancialParam6(convert(request.getFinancialParameters().getFinancialParam6()));
request.getAdditionalParameters().setAdditionalParam2(convert(request.getAdditionalParameters().getAdditionalParam2()));
request.getAdditionalParameters().setAdditionalParam3(convert(request.getAdditionalParameters().getAdditionalParam3()));
request.getAdditionalParameters().setAdditionalParam8(convert(request.getAdditionalParameters().getAdditionalParam8()));
request.getAdditionalParameters().setAdditionalParam9(convert(request.getAdditionalParameters().getAdditionalParam9()));
request.getAdditionalParameters().setAdditionalParam10(convert(request.getAdditionalParameters().getAdditionalParam10()));
(...)
return request;
}
}
有没有办法做得更好?我唯一的想法是制作一个需要更改的字段列表,并使用反射更改它。 例如:
List<String> filedsToChange = Arrays.asList(
"FinancialParameters.financialParam1",
"FinancialParameters.financialParam3",
"FinancialParameters.financialParam5",
"FinancialParameters.financialParam6",
"AdditionalParameters.AdditionalParam10",
);
但它可以做得更好,没有反思吗?可以通过使用自定义注释注释字段来完成吗?
答案 0 :(得分:0)
尝试使用HashMap!
HashMap<String, BigDecimal> paramMap
地图有两个基本部分,一个是键和一个值。您可以将每个参数名称设置为地图中的键,该值包含“参数”信息。
有了这个,你可以为你运行的任何程序提供一些“参数”(可以像字符串一样简单),然后它会将地图用作一种“密码”,并允许你获得特定的数据和基于参数的信息。
干杯!