设置超过 100 个具有不同值的对象
Setting More than 100 Object having different Values
我正在处理一个遗留项目,我们在其中使用 SOAP 服务,该服务需要在我们将其发送到 JAXB 对象之前设置大量字段值。
目前我们正在通过 setter 方法进行操作,如下所示 -
需要设置100个这样的标签,
FieldValue field1 = new FieldValue(); // field value
field1.setFieldName("FieldLabel1");
field1.setValue(fileValue);
lstfield.add(field1);
FieldValue field2 = new FieldValue(); // Action date in format 12-Feb-14
field2.setFieldName("FieldLabel2");
field2.setValue(DateUtill.getCurrentdate());
lstfield.add(field2);
设置 100 个 FieldValue 对象对于维护来说会很麻烦,如果万一 Web 服务提供商更改任何标签名称,查找和更改标签名称将非常忙碌。
另一种设置方法是使用构造函数,但这似乎不是正确的选择。
我正在寻找是否有任何其他方法可以完成上述任务,这将非常有帮助。
如果您有一个包含字段的 UI class,您始终可以创建字段名称的静态列表。更好的是,您可以创建一个 enum
。例如:
public enum Field {
FIELD_1("FieldName1"),
...
String name;
Field(String name) {this.name = name;}
public String getName() { return this.name; }
}
...
FieldValue field1 = new FieldValue(); // field value
field1.setFieldName(Field_1.getName());
field1.setValue(fileValue);
lstfield.add(field1);
如果要重构,只需更改此枚举中的名称即可。
根据 OP 的评论更新
这不是理想的方式,但您可以为 setValue
调用创建一个值列表,然后使用以下方法添加字段:
public void setFields(Object[] values) {
for (int i = 0; i < Field.values().length(); ++i) {
final FieldValue fv = new FieldValue();
fv.setFieldName(Field.values()[i].getName());
fv.setValue(values[i]));
lstField.add(fv);
}
}
您可以创建 100 个 FieldValue
对象并使用 for 块将它们添加到列表中:
List<FieldValue> fieldValueList = new ArrayList<>();
final int NUM_OF_OBJECTS = 100;
for (int i = 0; i < NUM_OF_OBJECTS; i++) {
fieldValueList.add(new FieldValue());
}
然后可以在FieldValue
class中写一个方法来设置对象的字段名和值:
public void setFieldNameAndValue(String fieldName, Object value) {
setFieldName(fieldName);
setValue(value);
}
现在您可以为生成的列表的每个项目设置字段名称和值:
fieldValueList.get(0).setFieldNameAndValue("FieldLabel1", fileValue);
fieldValueList.get(1).setFieldNameAndValue("FieldLabel2", DateUtill.getCurrentdate());
// set fieldName and value for remained objects
另一种方法是使用 Array 而不是 List:
final int NUM_OF_OBJECTS = 100;
FieldValue[] fieldValues = new FieldValue[NUM_OF_OBJECTS];
for (int i = 0; i < NUM_OF_OBJECTS; i++) {
fieldValues[i] = new FieldValue();
}
fieldValues[0].setFieldNameAndValue("FieldLabel1", fileValue);
fieldValues[1].setFieldNameAndValue("FieldLabel2", DateUtill.getCurrentdate());
已更新 另一种解决方案:
我认为在 FieldValue
class 中声明 setFieldNameAndValue
不是一个好方法。请忘记那个解决方案 :D
final int NUM_OF_OBJECTS = 100;
final ArrayList<FieldValue> filedValueList = new ArrayList<>(NUM_OF_OBJECTS);
addNewFieldValue(filedValueList, "fieldName1", fieldValue);
addNewFieldValue(filedValueList, "fieldName2", DateUtill.getCurrentdate());
addNewFieldValue
可以这样编程:
private static void addNewFieldValue(ArrayList<FieldValue> filedValueList, String fieldName, Object value) {
final FieldValue fieldValue = new FieldValue();
fieldValue.setFieldName(fieldName);
fieldValue.setValue(value);
filedValueList.add(fieldValue);
}
希望这些台词能帮到你:)
我正在处理一个遗留项目,我们在其中使用 SOAP 服务,该服务需要在我们将其发送到 JAXB 对象之前设置大量字段值。 目前我们正在通过 setter 方法进行操作,如下所示 -
需要设置100个这样的标签,
FieldValue field1 = new FieldValue(); // field value
field1.setFieldName("FieldLabel1");
field1.setValue(fileValue);
lstfield.add(field1);
FieldValue field2 = new FieldValue(); // Action date in format 12-Feb-14
field2.setFieldName("FieldLabel2");
field2.setValue(DateUtill.getCurrentdate());
lstfield.add(field2);
设置 100 个 FieldValue 对象对于维护来说会很麻烦,如果万一 Web 服务提供商更改任何标签名称,查找和更改标签名称将非常忙碌。
另一种设置方法是使用构造函数,但这似乎不是正确的选择。 我正在寻找是否有任何其他方法可以完成上述任务,这将非常有帮助。
如果您有一个包含字段的 UI class,您始终可以创建字段名称的静态列表。更好的是,您可以创建一个 enum
。例如:
public enum Field {
FIELD_1("FieldName1"),
...
String name;
Field(String name) {this.name = name;}
public String getName() { return this.name; }
}
...
FieldValue field1 = new FieldValue(); // field value
field1.setFieldName(Field_1.getName());
field1.setValue(fileValue);
lstfield.add(field1);
如果要重构,只需更改此枚举中的名称即可。
根据 OP 的评论更新
这不是理想的方式,但您可以为 setValue
调用创建一个值列表,然后使用以下方法添加字段:
public void setFields(Object[] values) {
for (int i = 0; i < Field.values().length(); ++i) {
final FieldValue fv = new FieldValue();
fv.setFieldName(Field.values()[i].getName());
fv.setValue(values[i]));
lstField.add(fv);
}
}
您可以创建 100 个 FieldValue
对象并使用 for 块将它们添加到列表中:
List<FieldValue> fieldValueList = new ArrayList<>();
final int NUM_OF_OBJECTS = 100;
for (int i = 0; i < NUM_OF_OBJECTS; i++) {
fieldValueList.add(new FieldValue());
}
然后可以在FieldValue
class中写一个方法来设置对象的字段名和值:
public void setFieldNameAndValue(String fieldName, Object value) {
setFieldName(fieldName);
setValue(value);
}
现在您可以为生成的列表的每个项目设置字段名称和值:
fieldValueList.get(0).setFieldNameAndValue("FieldLabel1", fileValue);
fieldValueList.get(1).setFieldNameAndValue("FieldLabel2", DateUtill.getCurrentdate());
// set fieldName and value for remained objects
另一种方法是使用 Array 而不是 List:
final int NUM_OF_OBJECTS = 100;
FieldValue[] fieldValues = new FieldValue[NUM_OF_OBJECTS];
for (int i = 0; i < NUM_OF_OBJECTS; i++) {
fieldValues[i] = new FieldValue();
}
fieldValues[0].setFieldNameAndValue("FieldLabel1", fileValue);
fieldValues[1].setFieldNameAndValue("FieldLabel2", DateUtill.getCurrentdate());
已更新 另一种解决方案:
我认为在 FieldValue
class 中声明 setFieldNameAndValue
不是一个好方法。请忘记那个解决方案 :D
final int NUM_OF_OBJECTS = 100;
final ArrayList<FieldValue> filedValueList = new ArrayList<>(NUM_OF_OBJECTS);
addNewFieldValue(filedValueList, "fieldName1", fieldValue);
addNewFieldValue(filedValueList, "fieldName2", DateUtill.getCurrentdate());
addNewFieldValue
可以这样编程:
private static void addNewFieldValue(ArrayList<FieldValue> filedValueList, String fieldName, Object value) {
final FieldValue fieldValue = new FieldValue();
fieldValue.setFieldName(fieldName);
fieldValue.setValue(value);
filedValueList.add(fieldValue);
}
希望这些台词能帮到你:)