生成非常大的Java代码

时间:2013-03-26 18:58:23

标签: java code-generation javac stringtemplate-4

我需要从CHM文件中将~20k内置函数和常量填充到List中。首先,我尝试序列化它们的列表,但反序列化需要1500ms(对于快速代码完成来说太长了,即使在第一次命中时也是如此)。

使用StringTemplate尝试生成代码,生成有效代码。但它不会编译,因为“initEnums()方法超出了65536的大小限制”。 (我的Eclipse很快就会死掉)

生成的方法如下所示:

public XModelField[] initEnums() {
    return new XModelField[] {
        new XModelField("aName", "aType", ...),
        ...
        // About 4'000 more entries
    };
}

如果此限制仅限于源代码,我可以使用另一个库直接生成类文件(可能是CodeModel)。我想保留我的代码,如果可能的话,不要再从头开始重写输出生成器。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我认为你应该重新考虑你的策略。相应地建模您的数据结构和方法,您不必生成代码。 而是为4000个常量生成Java代码,将数据存储在文件或数据库中,并编写一个简短的方法,在初始化时读取该数据,以填充数据对象的列表。

生成代码是一个强大的工具,但您应该小心使用它。我不认为你的用例甚至是必要的,但是如果你认为它是,那么你可以尝试将生成的代码部分最小化,以保持简单。通常,您可以将大量通用代码提取到抽象超类中,这样您只需要为子类中的某些方法生成代码。并且生成4000个常量的代码实际上是不必要的。将数据保存为数据并动态处理您的数据。