假设我写了以下几种方法:
public void submitForm1() {
open();
setField(1, "blah");
setField(3, "bla");
setField(4, "blah blah");
submit();
}
public void submitForm2() {
open();
setField(1, "blah");
checkBox(1 , true);
submit();
}
....
public void submitForm100() {
open();
setField(1, "bla");
setField(2, "bla bla");
setField(3, "blah");
setArea(1, "blah blah");
submit();
}
这些方法让我觉得我经常重复自己。我觉得它应该写成这样的东西:
public void submitForm1() {
MyMethods.submitForm(
{SET_FIELD, 1, "blah"},
{SET_FIELD, 3, "bla"},
{SET_FIELD, 4, "blah blah"}
);
}
public void submitForm2() {
MyMethods.submitForm(
{SET_FIELD, 1, "blah"},
{CHECKBOX, 1, true}
);
}
....
public void submitForm100() {
MyMethods.submitForm(
{SET_FIELD, 1, "bla"},
{SET_FIELD, 2, "bla bla"},
{SET_FIELD, 3, "blah"},
{SET_AREA, 1, "blah blah"},
);
}
这样我就不必重复所有这些打开并一遍又一遍地提交方法。
有办法做到这一点吗?
答案 0 :(得分:3)
例如,您可以使用"回调" 。为此,做这样的事情:
obj.getJSONObject("error").getString("message") ;
外面:
obj.getString("message") ;
答案 1 :(得分:2)
您可以使用以下内容:
public interface FormSubmission {
void set();
default submitForm() {
open();
set();
submit();
}
}
然后你的代码看起来像:
Map<Integer, FormSubmission > forms = new HashMap<> ();
//in constructor or static initialisation block:
forms.put(1, () -> { setField(1, "blah");
setField(3, "bla");
setField(4, "blah blah"); });
//etc.
public void submitForm(Integer i) {
forms.get(i).submitForm(); //probably want to handle NPE here
}
它类似于命令模式。
答案 2 :(得分:1)
我不这么认为,但为什么不这样做:
public void submit() {
open();
switch(formNumber) {
case 1:
submitForm1();
case 2:
submitForm2();
case 100:
submitForm100();
default:
break;
}
submit();
}