Я пишу простое распределенное Java-приложение RMI, и у меня есть куча методов, каждый из которых должен перебирать карту клиентских интерфейсов для вызова различных других методов на этих интерфейсах, например:
public void methodX (arg1, arg2) {
Iterator<String> itr = clients.keySet().iterator;
while (itr.hasNext()) {
String name = itr.next();
if (!"mod".equals(name)) {
try {
clients.get(name).methodXX(arg1, arg2);
} catch(RemoteException ex) {
// do something
}
}
}
}
public void methodY (arg1, arg2, arg3) {
Iterator<String> itr = clients.keySet().iterator;
while (itr.hasNext()) {
String name = itr.next();
if (!"mod".equals(name)) {
try {
clients.get(name).methodYY(arg1, arg2, arg3);
} catch(RemoteException ex) {
// do something
}
}
}
}
Теперь я изменил их так, чтобы вместо этого каждый из них вызывал один метод doAll, передавая новый аргумент с именем MESSAGE_TYPE, например:
public void methodX (arg1, arg2) {
doAll(MESSAGE_TYPE.METHODX, arg1, arg2, null);
}
public void methodY (arg1, arg2, arg3) {
doAll(MESSAGE_TYPE_METHODY, arg1, arg2, arg3);
}
И метод doAll:
public void doAll(msg_type, arg1, arg2, arg3) {
Iterator<String> itr = clients.keySet().iterator;
while (itr.hasNext()) {
String name = itr.next();
if (!"mod".equals(name)) {
try {
switch(msg_type) {
case METHODX:
clients.get(name).methodXX(arg1, arg2);
break;
case METHODY:
clients.get(name).methodYY(arg1, arg2, arg3);
break;
}
} catch(RemoteException ex) {
// do something
}
}
}
}
Теперь есть еще много подобных методов, и поэтому мой метод doAll должен принимать несколько аргументов, и каждый вызывающий его метод XX передает ему множество нулей.
Могу ли я переписать это, чтобы оно было более кратким? Если да, можете ли вы привести пример?