Я пишу простое приложение, распределенная Java RMI и у меня есть куча методов, каждый нужно перебирать карту клиентских интерфейсов для того, чтобы вызвать различные другие методы этих интерфейсов, например:Какой самый сжатый/лучший способ написать этот Java-код?
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, который вызывает его, передает ему множество нулей.
Могу ли я переписать это, чтобы оно было более кратким? Если да, можете ли вы привести пример?
«... прост в распространении java rmi application ...» oxymoron much? –