有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    尝试使用HashMap

    HashMap<String, BigDecimal> paramMap
    

    地图有两个基本部分,一个键和一个值。可以将每个参数名设置为映射中的一个键,该值就是包含“参数”信息的值

    有了这个,你可以给你运行的任何程序一些“参数”(可以像一个字符串一样简单),然后它会把地图当作一种“密码”,让你根据参数获得特定的数据和信息

    干杯