我需要将 CHM 文件中的 ~20k 内置函数和常量填充到列表中。首先,我尝试序列化它们的列表,但反序列化需要 1500 毫秒(对于快速完成代码来说太长了,即使在第一次命中也是如此)。
尝试使用 StringTemplate 生成代码,它会生成有效的代码。但它不会编译,因为“initEnums()方法超出了65536的大小限制”。 (我的 Eclipse 很快就死了)
生成的方法如下所示:
public XModelField[] initEnums() {
return new XModelField[] {
new XModelField("aName", "aType", ...),
...
// About 4'000 more entries
};
}
如果此限制仅限于源代码,我可以使用另一个库直接生成类文件(也许是 CodeModel)。如果可能的话,我想保留我的代码,而无需再次从头开始重写输出生成器。有什么建议吗?
最佳答案
我认为你应该重新考虑你的策略。相应地对数据结构和方法进行建模,而无需生成代码。 相反,要生成 4000 个常量的 Java 代码,请将数据存储在文件或数据库中,并编写一个简短的方法来在初始化时读取该数据,以用数据对象填充列表。
生成代码是一个强大的工具,但您应该谨慎使用它。我认为这对于您的用例来说甚至没有必要,但如果您认为有必要,那么您可以尝试将要生成的代码部分最小化到绝对最小值,以保持简单。通常,您可以将大量通用代码提取到抽象父类(super class)中,这样您只需为子类中的某些方法生成代码。并且为 4000 个常量生成代码确实没有必要。将数据保留为数据并动态地操作您的数据。
关于java - 生成非常大的 Java 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15645225/