Есть ли общая библиотека “бэкенда” для отражения Java

Один раздел назначен ровно одному потребителю в группе. В вашем случае у вас есть только 4 потребителя из 20, которые в настоящее время работают. Вам нужно увеличить количество разделов, если вы хотите больше назначенных потребителей.

11
задан Dave Ray 13 December 2008 в 00:00
поделиться

7 ответов

Просто комментарий к Вашему собственному ответу; на самом деле beanutils имеет поддержку получения "близкого соответствия", данного ряд параметров. См. getMatchingAccessibleMethod ()

BeanUtils действительно мощен и имеет много служебных методов для осмотра классов. Та же поддержка естественно доступна конструкторам.

7
ответ дан 3 December 2019 в 04:34
поделиться

Попробуйте модуль Отражения ФЕСТИВАЛЯ. Это - быстрый способ сделать отражение Java. Например:

 String name = method("get").withReturnType(String.class)
                         .withParameterTypes(int.class)
                         .in(names)
                         .invoke(8);
7
ответ дан 3 December 2019 в 04:34
поделиться

Смотрите на поддержку сценариев Java; я полагаю, что это поможет Вам заняться своей проблемой.

2
ответ дан 3 December 2019 в 04:34
поделиться
2
ответ дан 3 December 2019 в 04:34
поделиться

Я закончил тем, что шел с предложением 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, я избегаю большинства ловушек вокруг выхода. Кроме того, у меня есть чистый, простой интерфейс, который я могу выгрузить с "реальной" реализацией, если это оказывается необходимым.

Любая обратная связь или альтернативные решения являются больше, чем приветствие.

0
ответ дан 3 December 2019 в 04:34
поделиться

Я бы сильно считал также взглядом на Springs Replienteutils Class. Очень мощное обращение с отражением.

1
ответ дан 3 December 2019 в 04:34
поделиться

ЧТОБЫ поднять это из мертвых:

invoke(Object object, String methodName, Object[] args) 

Apache Commons lang имеет именно такой метод. MethodUtils#invoke

1
ответ дан 3 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: