Java, создание интерфейса динамически? - PullRequest
1 голос
/ 14 октября 2010

Я ищу решение для создания интерфейса во время выполнения.Я действительно не знаю, возможно ли это в любом случае.

Проблема:

У меня есть служба OSGi, которая публикует Map<String,String>, где ключ определяет действие для этой службы.Я хочу опубликовать этот сервис напрямую как Hessian сервис с пружиной, но для этого мне нужен delcare интерфейс.Теперь я хотел бы создать этот интерфейс во время выполнения.

Ответы [ 4 ]

3 голосов
/ 14 октября 2010

Возможно создавать интерфейсы динамически, например, генерируя его с помощью библиотеки манипулирования байт-кодом, такой как ASM .Но будет невозможно использовать этот интерфейс, потому что никакой код не может быть скомпилирован с ним (если вы не генерируете динамически и код, который его использует).пытаетесь сделать?

2 голосов
/ 14 октября 2010

На самом деле вы не можете этого сделать (если только вы не задействуете манипуляцию / создание байт-кода, и я не думаю, что это лучший путь).

Что хорошего в динамически созданном интерфейсе, если у вас ничего нетчто может получить доступ к этому интерфейсу?

Или другими словами: ничто не может скомпилироваться с динамически создаваемым интерфейсом (поскольку он не существует во время компиляции, очевидно).Так кто бы это использовал?

0 голосов
/ 09 декабря 2010

Интерфейсы и классы существуют исключительно для того, чтобы помочь компиляторам находить возможные ошибки.Если вы хотите создать этот интерфейс во время выполнения, у вас нет компилятора, так как он не найдет ошибок, так зачем вам этот интерфейс?

В такой ситуации просто опубликуйте реализацию какого-то универсального интерфейса, который может выглядеть следующим образом: interface GenericInterface {Object invokeMethod (String name, Object ... arguments);} Это единственный интерфейс, который вам нужен, и вы можете создать его во время компиляции!Только его реализации вам может понадобиться создать во время выполнения, например, с помощью java.lang.reflect.Proxy

0 голосов
/ 14 октября 2010

Получил следующий ответ от другого вопроса .На самом деле в примере написан новый класс, поэтому, возможно, это поможет вам.

JDK6 имеет API компилятора Java .Однако использовать его не обязательно очень просто.

Быстрый Google вытащил этот пример использования .

...