Один раздел назначен ровно одному потребителю в группе. В вашем случае у вас есть только 4 потребителя из 20, которые в настоящее время работают. Вам нужно увеличить количество разделов, если вы хотите больше назначенных потребителей.
Просто комментарий к Вашему собственному ответу; на самом деле beanutils имеет поддержку получения "близкого соответствия", данного ряд параметров. См. getMatchingAccessibleMethod ()
BeanUtils действительно мощен и имеет много служебных методов для осмотра классов. Та же поддержка естественно доступна конструкторам.
Попробуйте модуль Отражения ФЕСТИВАЛЯ. Это - быстрый способ сделать отражение Java. Например:
String name = method("get").withReturnType(String.class)
.withParameterTypes(int.class)
.in(names)
.invoke(8);
Смотрите на поддержку сценариев Java; я полагаю, что это поможет Вам заняться своей проблемой.
Я закончил тем, что шел с предложением Alex. BeanUtils помогает много для бобов, но я не хочу работать только с Бобами. ФЕСТИВАЛЬ выглядит действительно прохладным, и я отметил его для дальнейшего исследования, но как BeanUtils, это, кажется, не решает то, что я считаю трудной проблемой здесь. А именно, учитывая имя метода и список аргументов, выберите метод что лучшие "соответствия" аргументы. Если метод берет плавание, и у меня есть двойное, должно быть достаточно умно не отклонить тот метод, потому что подпись не соответствует точно.
Очевидно, языки сценариев основывались на JVM, решают эту проблему, но намного более сложным способом, чем мне нужно из-за определенной для языка оптимизации. Так, так как это - незначительная и экспериментальная функция, я выбрал быстрое решение с помощью поддержки механизма выполнения сценариев (JavaScript, в особенности) в Java 1.6. Вот основная идея:
private ScriptEngine engine = ... initialize with JavaScript engine ...
private Object invoke(Object object, String methodName, Object[] args)
throws RhsFunctionException
{
// build up "o.method(arg0, arg1, arg2, ...)"
StringBuilder exp = new StringBuilder("o." + methodName);
engine.put("o", object);
buildArgs(arguments, exp);
try {
return engine.eval(exp.toString());
}
catch (ScriptException e) {
throw new RhsFunctionException(e.getMessage(), e);
}
}
private void buildArgs(Object[] args, StringBuilder exp)
{
// Use bindings to avoid having to escape arguments
exp.append('(');
int i = 0;
for(Symbol arg : args) {
String argName = "arg" + i;
engine.put(argName, arg);
if(i != 0) {
exp.append(',');
}
exp.append(argName);
++i;
}
exp.append(')');
}
Существует, очевидно, немного больше к нему, но это - основная идея. Мне действительно не нравится создавать строку и оценивать ее, но при помощи привязки, предложенной Alex, я избегаю большинства ловушек вокруг выхода. Кроме того, у меня есть чистый, простой интерфейс, который я могу выгрузить с "реальной" реализацией, если это оказывается необходимым.
Любая обратная связь или альтернативные решения являются больше, чем приветствие.
Я бы сильно считал также взглядом на Springs Replienteutils Class. Очень мощное обращение с отражением.
ЧТОБЫ поднять это из мертвых:
invoke(Object object, String methodName, Object[] args)
Apache Commons lang имеет именно такой метод. MethodUtils#invoke