1

非常に大きく肥大化したクラスがあり、それを個別のファイルに分割したいのですが、ユーザーに対して完全に透過的であり、クラスを使用する既存のプロジェクトと互換性がある必要があります。

特に、私は自分のImageMatrixクラスを持っており、それは大量の単項関数、スカラーを使用した大量のバイナリ関数、別のイメージを使用した大量のバイナリ関数などを定義しています。クラスをクリーンで保守可能に保つために、各クラスを置きたい別のファイルの演算子の。

これらのメソッドをカット アンド ペーストしてファイルに貼り付け、ソースに含める方法はありますか?

だから私はまだこれを行うことができればいいのですが、メソッドは実際には別のファイルに存在します:

    ImageMatrix img = new ImageMatrix(800, 600, 3);
    img.clear(0.5f, 0.0f, 0,0f);
    img.addSelf(anotherImg);
    img.normalize();
    img.abs();
    img.addSelf(0.5);

実装はパフォーマンスに対して非常に最適化されているため、各メソッドは約 15 ~ 30 行のコードであり、Bufferedimage やプレーンな int[] でさえ達成することは不可能です。多くのコードの重複があり、これが同様のメソッドをグループ化する主な理由です。関数を追加したり、グローバルな動作 (エラー チェックなど) を変更したりしても、簡単に一貫性を保つことができます。

4

4 に答える 4

2

残念ながら、Javaクラス定義を複数のファイルに分割することはできません。

巨大なクラス定義が必要ないように、コードを再構築してみてください。多くの場合、これは、getterメソッドとsetterメソッドを介していくつかの状態を公開し、これらのメソッドを使用してメインクラスに機能を追加するサポートクラスを作成することを意味します。

あなたの場合、のようなサポートクラスを追加することを検討するかもしれません。または、非常に小さなクラスが好きな場合のように、ImageFiltersさらに狭いものを追加することも検討してください。ImageNormalizer

于 2012-04-05T08:36:48.603 に答える
1

ファイル間で Java クラスを分割することはできません。できることは、各メソッドが自己完結型である場合、静的メソッドを使用してクラスを作成できるということです。したがって、ある程度までは、コードをカット アンド ペーストするだけで済みます。

于 2012-04-05T08:39:49.310 に答える
1

より一般的なクラスを作成し、そこにさらに一般的なメソッドを配置して、それをImageMatrix拡張することができます。また、多数の行列操作関数がある場合、コードの重複が多くなる可能性があります。つまり、共通コードを aux メソッドに移動して別の場所から呼び出すのではなく、別のメソッドで同じコードを繰り返すなどです。

于 2012-04-05T08:40:56.487 に答える
1

デリゲート メソッドを使用することもできます。これは、メソッドの定義がまだ にあることを意味しますImageMatrixが、それらは別のクラスに実装されています。メソッドの複雑さによっては、これによりImageMatrix.

class ImageMatrix {

    MatrixHelperOne helperOne = new MatrixHelperOne();

    ...

    public void complexMethod1(Arg arg) {
        helperOne.complexMethod1(arg);
    }

    ...
}
于 2012-04-05T08:47:11.647 に答える