Как мне включить текст файла в мой код Java? - PullRequest
3 голосов
/ 02 февраля 2010

Кажется, что Java не настроен на то, что я делал ранее в C ++ (нет ничего удивительного). У меня есть набор правил, сгенерированных из другого приложения (серия проверок if-then). Эти правила время от времени меняются, поэтому в C ++ я бы сделал это:

double variableForRules=1;
bool condition=false;
#include "rules.out";
if(condition) //do something

По существу, проверка if-then в rules.out будет использовать "variableForRules" (и несколько других переменных), чтобы решить, должно ли условие быть установлено в значение true. Если оно установлено в true после проверки правил, программа что-то делает.

Есть ли подобный способ сделать это на Java? Или мой единственный вариант иметь rules.out на самом деле - это целый класс, для которого нужно создать экземпляр и т. Д.?

Спасибо!

Ответы [ 7 ]

7 голосов
/ 02 февраля 2010

Поскольку вы автоматически генерируете этот rules.out, вы также можете автоматически генерировать свою функцию Java. Надеюсь, добавить эту функциональность не так уж и сложно.

3 голосов
/ 02 февраля 2010

Поскольку в Java нет препроцессора, вы не можете этого сделать. Как вы сказали, вы должны реализовать свою логику внутри класса.

1 голос
/ 02 февраля 2010

rules.out на самом деле должен быть целым классом, который должен быть создан для выполнения кода.

Поскольку rules.out генерируется сторонним приложением, лучше всего написать свой собственный CppToJavaTransformer, который читает файл rules.out в качестве входных данных и генерирует Rules.java. Предполагается, что rules.out доступно до компиляции, а Rules.java будет использоваться во время компиляции. Недостатком этого является то, что требуется дополнительное преобразование.

В качестве альтернативы вы можете написать код, который интерпретирует rules.out и выполнять необходимые инструкции, используя самоанализ. Это сложный способ, но rules.out можно изменить и во время выполнения.

1 голос
/ 02 февраля 2010

В Java было бы обычным для другого приложения сохранить правила в файл .xml или .properties, а затем прочитать Java в этом файле.

1 голос
/ 02 февраля 2010

Может быть, вы могли бы использовать сценарии для этого. Вы можете взглянуть на Руководство Java Scripting Programmer .

0 голосов
/ 02 февраля 2010

Можно попробовать использовать отражение (см .: Создание новых объектов и Вызов методов по имени )

Сначала сгенерируйте файл Rules.java так, как вы сейчас создаете rules.out, и скомпилируйте его.

Затем загрузите файл класса в ваше приложение во время выполнения так, как традиционно загружались драйверы JDBC.

Class clazz = Class.forName("com.mydomain.Rules");

Если ваше приложение работает в течение длительных периодов времени (дольше, чем время жизни отдельного файла Rules.class), вам придется создать свой собственный ClassLoader для замены базового класса в течение одной среды выполнения.

0 голосов
/ 02 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...