如何在Java代码中包含文件的文本?

时间:2010-02-01 22:55:37

标签: java

似乎Java没有像我之前在C ++中所做的那样(没有什么大惊喜)。我有一套从另一个应用程序生成的规则(一系列if-then检查)。这些规则会不时发生变化,因此在C ++中我会这样做:

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

本质上,rules.out中的if-then检查将使用“variableForRules”(以及其他几个变量)来决定是否应将条件设置为true。如果在规则评估之后将其设置为true,则程序会执行某些操作。

在Java中有类似的方法吗?或者是我唯一选择使用rules.out实际上是一个需要实例化的整个类等等?

谢谢!

7 个答案:

答案 0 :(得分:7)

由于您正在自动生成rules.out,因此您也可以自动生成Java函数。希望添加该功能并不会太痛苦。

答案 1 :(得分:3)

由于Java中没有预处理器,因此无法执行此操作。就像你说的那样,你必须在一个类中实现你的逻辑。

答案 2 :(得分:1)

也许您可以使用脚本来实现。您可以查看Java Scripting Programmer's guide

答案 3 :(得分:1)

在Java中,其他应用程序通常会将规则保存到.xml或.properties文件中,然后在该文件中读取Java。

答案 4 :(得分:1)

rules.out实际上必须是一个需要为要执行的代码实例化的整个类。

由于rules.out是由第三方应用程序生成的,最好的办法是编写自己的CppToJavaTransformer读取文件rules.out作为输入并生成Rules.java。这假定rules.out在编译时可用,并且Rules.java将在编译时使用。缺点是需要进行额外的转换。

或者,您可以编写解释rules.out的代码并使用内省执行所需的指令。这很难,但rules.out也可以在运行时更改。

答案 5 :(得分:0)

即使可以包含规则文件,也没有任何帮助。正如你所说,你的规则是动态的。看起来你的java代码需要针对不同的场景进行更改。

答案 6 :(得分:0)

您可以尝试使用reflection(请参阅:创建新对象按名称调用方法

首先以您当前构建rules.out并编译它的方式生成Rules.java。

然后在运行时以传统方式加载JDBC驱动程序的方式将类文件加载到应用程序中。

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

如果您的应用程序运行很长一段时间(比单个Rules.class文件的生命周期长),那么您必须创建自己的ClassLoader,以便在单个运行时期间交换基础类。