2015-01-05 4 views
3

Я хотел знать, есть ли способ импортировать код динамического изменения кода в основную кодировку. Что-то вроде этого:Как я могу вставить java-файл внутри кода в Java

Main: 
int x; 
(insert input.java) 

Содержание input.java:

x = 2; 

Могу ли я импортировать код внутри input.java в основной код?

+0

Что вы подразумеваете под термином "dynamic change code"? Т.е. что здесь используется? –

+1

Если вы имеете в виду что-то вроде директивы include c, абсолютно нет. Большая часть дизайна Java построена вокруг того, что не нужно делать такие вещи. – jjm

+0

Вы имеете в виду во время компиляции или во время выполнения? Если вы хотите включить один исходный файл из другого во время компиляции, ответ, как сказал jjm, является определенным «нет» - язык java этого не поддерживает. Если вы пытаетесь включить код во время выполнения, в теории есть способы сделать это, но ничего прямолинейного, и это почти наверняка не очень хорошая идея. Что вы пытаетесь достичь? – dhm

ответ

6

В состав Java не включены директивы во время компиляции источника.

У него нет оценки для оценки исходного исходного кода Java во время выполнения.

Единственный реальный способ получить новый Java-код в исполняемой виртуальной машине Java - это загрузка классов.

Однако, с момента появления javax.script (Java 6), достаточно поддерживаемая среда выполнения (например, реализация Javascript Nashorn от Java 8) может импортировать и оценивать некоторые сценарии кода, которые возвращаются в Java API. Это огромный вопрос & слишком большой, чтобы подробно разобраться здесь.

+1

Просто мысль: Может быть, какой-то компиляционный инструмент имеет эту функцию. Например, некоторое время назад [кто-то задал вопрос] (http://stackoverflow.com/questions/27748415/is-there-something-like-ifdef-for-methods-in-java#comment43908043_27748415) о том, как удалить метод объявления, условно похожие на C, на '# ifdef'. Я знал, что с помощью java вы не можете этого сделать; что я ** не знал **, было то, что с помощью Ant вы можете. Вы можете указать некоторые «специальные» комментарии, которые муравьи должны искать для компиляции _before_, а затем как они должны вести себя при обнаружении этих комментариев. Может быть, есть способ сделать 'include' с Ant? – BackSlash

+0

Конечно, если есть какой-то процесс предварительной компиляции для генерации кода, тогда это сработает, но тогда это означало бы, что все остальные должны будут следовать вашему процессу сборки, и ваша среда IDE не будет работать должным образом с этими файлами и т. Д. . Одна из возможностей может заключаться в том, чтобы иметь начальный шаг препроцесса, который генерирует источник из не-Java-формата (грамматика BNF или что у вас есть), а затем использовать нормальную Java с этого момента. Но тогда это действительно не #include, как OP. – kittylyst

0

Java не имеет эквивалента eval или любой другой конструкции, способной оценивать код во время выполнения. Он отлично способен анализировать внешние данные, такие как XML, и принимать меры в отношении того, что он находит. Он также может запускать и выводить выходные данные из внешних процессов, что вполне может быть динамически генерируемым кодом. Детали этого процесса зависят от вашей ОС.

Смежные вопросы