3

クラスの NCSS 数 (~850) を減らすために、すべてのメソッドを独自のクラスに分割し、簡単にするために、すべてのヘルパー関数を保持する抽象クラスを拡張しました。

AbstractMethod.class

public class AbstractMethod {
    protected String requestWebPage(URL url) {
        // download a webpage as a string
    }
}

Example "account" subclass

public class AccountData extends AbstractMethod {
    public String getAccount(String sessionId){
        String webPage = requestWebPage("http://google.com/"+sessionId);
        system.out.println(webPage);
        return webPage;
    }
}

これらのメソッド クラスは約 10 個あり、メイン/ベース クラスのメソッドの 1 つが呼び出されたときにのみ初期化したいと考えています。

public class MyBaseClass() {
    private static AccountData ad;

    public MyBaseClass() {
        ad = new AccountData();  // Is there a better way?
    }

    public String getAccount(String sessionId) {
        return ad.getAccount(String sessionId);
    }
}

サブタイプをパラメーターとして受け入れ、そのクラスに基づいてオブジェクトを作成する MyBaseClass クラスに初期化関数を作成しようとしました。

private void initAccount() {
    if (ad == null) {
        ad = new AccountData();
    }
}

しかし、それは醜いので、サブクラスごとに1つ持つ必要があります。

では、これを行う「正しい」方法は何ですか?クラスが呼び出されると、1 つまたは 2 つのメソッドしか使用しない場合があるため、毎回すべてのサブクラスを初期化する必要はありません。

4

2 に答える 2

4

あなたが本当に望んでいるのは、抽象ヘルパー クラスではなく静的メソッドを使用することだと思われますimport static

そうすれば、これらのメソッドを定義するクラスは、必要に応じて、メソッドが実際に呼び出されたときにのみ初期化されます。

また、一般的に継承構造を、たまたまメソッドが定義されている場所に限定しません。

もちろん、これらのメソッドにインスタンス データを使用しないことが前提です。しかし、サンプル コードの外観からは、そのようには見えません。

于 2013-11-07T15:20:11.693 に答える