英文:
Setting More than 100 Object having different Values
问题
我正在处理一个遗留项目,在该项目中,我们正在调用一个SOAP服务,该服务要求在我们发送给JAXB对象之前在我们这一端设置许多字段值。
目前,我们是通过如下所示的setter方法来完成的 -
需要设置100个这样的标签,
FieldValue field1 = new FieldValue(); // 字段值
field1.setFieldName("FieldLabel1");
field1.setValue(fileValue);
lstfield.add(field1);
FieldValue field2 = new FieldValue(); // 日期格式的操作日期 12-Feb-14
field2.setFieldName("FieldLabel2");
field2.setValue(DateUtill.getCurrentdate());
lstfield.add(field2);
设置100个FieldValue对象将会很繁琐,如果WebService提供商更改任何标签名称,找到并更改标签名称将会非常繁琐。
另一种设置的方法是使用构造函数,但这似乎不是正确的选择。
我在寻找是否有其他方法可以完成上述任务,这将非常有帮助。
英文:
I am working on a legacy project, where we are consuming a SOAP service, that service requires lots of Field Value to be set at our end before we can send it to the JAXB object.
At the moment we are doing it via setter method as shown below -
100 such label needs to be set,
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);
Setting 100 FieldValue objects would be cumbersome for maintainance, if incase the webservice provider changes any label name it would be very hectic to find and change the label name.
Another way to set is using a constructor but that doesn't seem to be right option.
I was looking if there is any another way to do the above mentioned task that would be very helpful.
答案1
得分: 2
你可以使用循环创建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
类中编写一个方法来设置对象的 fieldName 和 value:
public void setFieldNameAndValue(String fieldName, Object value) {
setFieldName(fieldName);
setValue(value);
}
现在,你可以为生成的列表中的每个项设置 fieldName 和 value:
fieldValueList.get(0).setFieldNameAndValue("FieldLabel1", fileValue);
fieldValueList.get(1).setFieldNameAndValue("FieldLabel2", DateUtill.getCurrentdate());
// 为剩余的对象设置 fieldName 和 value
另一种方法是使用数组而不是列表:
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
类中声明 setFieldNameAndValue
不是一个好的方法。请忘记那个解决方案
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);
}
希望这些代码可以对你有所帮助
英文:
You can create 100 FieldValue
objects and add them to a list by using for block:
List<FieldValue> fieldValueList = new ArrayList<>();
final int NUM_OF_OBJECTS = 100;
for (int i = 0; i < NUM_OF_OBJECTS; i++) {
fieldValueList.add(new FieldValue());
}
Then you can write a method in FieldValue
class to set fieldName and value of objects:
public void setFieldNameAndValue(String fieldName, Object value) {
setFieldName(fieldName);
setValue(value);
}
and now you can set fieldName and value for each item of the generated list:
fieldValueList.get(0).setFieldNameAndValue("FieldLabel1", fileValue);
fieldValueList.get(1).setFieldNameAndValue("FieldLabel2", DateUtill.getCurrentdate());
// set fieldName and value for remained objects
Another way is using Array instead of 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());
UPDATED with one more solution:
I think declaring setFieldNameAndValue
in the FieldValue
class is not a good way. Please forget that solution
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
can be programmed like this:
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);
}
Hope these lines can help you
答案2
得分: 1
如果您有一个包含字段的UI类,您可以始终创建一个静态字段名称列表。更好的方法是创建一个`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(); // 字段值
field1.setFieldName(Field_1.getName());
field1.setValue(fileValue);
lstfield.add(field1);
如果您想要进行重构,只需在此枚举中更改名称。
**根据楼主的评论进行更新**
虽然不是理想的方法,但您可以为`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);
}
}
英文:
If you have a UI class containing the fields, you can always create a static list of field names. Better still, you can create an enum
. For example:
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);
If you want to refactor, Just change the name in this enum.
UPDATED based on OP's Comment
Not the ideal way, but you can create a list of value for setValue
call and then use the following method for adding the fields:
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);
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论