2

クラスの初期化に関して、ベストプラクティスを知りたいのですが、

Customer c = new Customer();つまり、クラスをトップレベルで一度初期化し、クラス内のすべての場所で使用する必要があります。

Tools tools = new Tools();
    public boolean doCIdCheck(int cId) {
        final Iterator<Customer> cursor = tools.Customers.iterator();
        while (cursor.hasNext()) {
            if (cursor.next().getCIdCheck(cId)) {
                return true;
            }
        }
        return false;
    }

または、new Customer().checkCId();必要な場所で使用する必要があります。

    public boolean doCIdCheck(int cId) {
        final Iterator<Customer> cursor = new Tools().Customers.iterator();
        while (cursor.hasNext()) {
            if (cursor.next().getCIdCheck(cId)) {
                return true;
            }
        }
        return false;
    }

または、各関数/メソッドに独自のクラスのインスタンスを持たせるのが最善です。

    public boolean doCIdCheck(int cId) {
        Tools tools = new Tools();
        final Iterator<Customer> cursor = tools.Customers.iterator();
        while (cursor.hasNext()) {
            if (cursor.next().getCIdCheck(cId)) {
                return true;
            }
        }
        return false;
    }
4

4 に答える 4

1

あなたの例から、最良のアプローチは、インスタンスを作成する代わりに、の共有メソッドとメンバーを宣言し、それらを次のように呼び出すことである Toolsように見えます。static

final Iterator<Customer> cursor = Tools.Customers.iterator();

もちろん、これは、競合を引き起こす可能性のあるデータを保存しないことを前提としていますTools。その場合は、複数のインスタンスを作成することをお勧めします。

于 2012-09-04T08:21:45.167 に答える
0

それはあなたの要件に依存します。たとえば、メソッドdoCIdCheckの外部でクラスToolsを使用したくない場合は、3番目のオプションが推奨されます。

于 2012-09-04T07:56:14.253 に答える
0

equals()メソッドをオーバーライドしてcid、で等しいかどうかをチェックできますCustomer

そして、それらのループの代わりに、メソッドのcontains()を使用できますCollection

したがって、doCIdCheckメソッドは次のようになります。

public boolean doCIdCheck(Customer cId) {
    Tools tools = new Tools();// I don't know if you are initializing list
                                // in Tools constructor or not but it should
                                // be initialized in constructor or in declaration
    return tools.customers.contains(cId);
}
于 2012-09-04T08:30:56.483 に答える
0

クラスのすべてのメソッドでそのオブジェクトが必要になることを考慮し、メモリ管理とプロセッサの消費のみを考慮します。

1.オプション1(グローバル変数をどこからでもアクセスできるようにする):これらのオブジェクトが大量にある場合、ツールのインスタンスごとに追加のカスタマーオブジェクトを格納するため、メモリ使用量が増加します。これにより、メソッドごとにカスタマーオブジェクトを作成および破棄する必要がないため、プロセッサの速度が向上します。

2.オプション2:(メソッド内でのみCustomerオブジェクトにアクセスできるようにする):メソッドにアクセスするたびにオブジェクトを作成および破棄するため、メモリ使用量が減少し、アプリケーションのプロセッサ負荷が高くなります。

多数のツールオブジェクトをインスタンス化する場合はIMOを選択し、オプション2を選択します。それ以外の場合は、ツールオブジェクトが存在する場合は、オプション1を選択します。

于 2012-09-04T08:39:28.180 に答える