代码之家  ›  专栏  ›  技术社区  ›  Dave

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

  •  3
  • Dave  · 技术社区  · 15 年前

    看来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 回复  |  直到 15 年前
        1
  •  7
  •   NG.    15 年前

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

        2
  •  3
  •   tangens    15 年前

        3
  •  1
  •   fforw    15 年前

    也许你可以用脚本来实现。你可以看一看 Java Scripting Programmer's guide

        4
  •  1
  •   Dean J    15 年前

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

        5
  •  1
  •   Gladwin Burboz    15 年前

    由于rules.out是由第三方应用程序生成的,所以最好编写自己的应用程序 CppToJavaTransformer 那个读文件 rules.out 作为输入并生成 Rules.java . 这假设 排除 在编译时间之前 Rules.java 将在编译时使用。这样做的缺点是需要进行额外的转换。

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

        6
  •  0
  •   fastcodejava    15 年前

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

        7
  •  0
  •   Chris Nava    15 年前

    你可以尝试使用 reflection (见: 创建新对象 按名称调用方法

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

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

    如果您的应用程序运行时间较长(比单个Rules.class文件的生存期更长),那么您必须创建自己的类加载器,以便在单个运行时交换基础类。