java可以很好地更改类的特定字段,而无需进行反射
我需要转换请求类中的许多(但不是全部)对象字段,并且我正在尝试以一种很好的方式进行转换。需要转换的时间域在不断变化
这是请求类的外观:
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",
);
但是,它能做得更好,不经过思考吗?可以通过使用自定义注释对字段进行注释吗
# 1 楼答案
尝试使用HashMap
地图有两个基本部分,一个键和一个值。可以将每个参数名设置为映射中的一个键,该值就是包含“参数”信息的值
有了这个,你可以给你运行的任何程序一些“参数”(可以像一个字符串一样简单),然后它会把地图当作一种“密码”,让你根据参数获得特定的数据和信息
干杯