0

CHMファイルからリストに最大20kの組み込み関数と定数を入力する必要があります。最初にそれらのリストをシリアル化しようとしましたが、逆シリアル化には1500ミリ秒かかります(最初のヒットでも、コードをすばやく完了するには長すぎます)。

有効なコードを生成するStringTemplateを使用してコード生成を試みました。ただし、「initEnums()メソッドがサイズ制限の65536を超えた」ため、コンパイルされません。(そして私のEclipseはすぐに死にます)

生成されたメソッドは次のようになります。

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

この制限がソースコードのみに制限されている場合は、別のライブラリを使用してクラスファイルを直接生成できます(おそらくCodeModel)。可能であれば、出力ジェネレーターを最初から書き直さずに、コードを保持したいと思います。助言がありますか?

4

1 に答える 1

1

戦略を考え直すべきだと思います。それに応じてデータ構造とメソッドをモデル化し、コードを生成する必要はありません。4000定数のJavaコードを生成する代わりに、データをファイルまたはデータベースに保存し、初期化時にそのデータを読み込んでリストにデータオブジェクトを入力する短いメソッドを記述します。

コードの生成は強力なツールですが、慎重に利用する必要があります。ユースケースでさえ必要だとは思いませんが、必要だと思う場合は、生成するコードの部分を最小限に抑えて、物事を単純にすることができます。多くの場合、多くの汎用コードを抽象スーパークラスに抽出できるため、サブクラスの一部のメソッドのコードを生成するだけで済みます。また、4000個の定数のコードを生成する必要はありません。データをデータとして保持し、データを動的に操作します。

于 2013-03-26T21:19:23.097 に答える