3


だから私の問題は、これのベストプラクティスがわからないということです。次の内容を持つ抽象スーパークラスがあります。

protected ArrayList<Item> itemList; 
protected abstract ArrayList<Item> getSpecificObjects(SQLiteStatement st);
public ArrayList<Item> getItems() {
            itemList= new ArrayList<Item>();
            SQLiteStatement st = generateStatement();
            getSpecificObjects(st);
            return itemList;
        }

getSpecificObjects(st)は、このクラスで宣言された抽象メソッドであり、その実装は抽象クラスのサブクラスにあります。SQLiteStatement ローカル変数をメソッド変数として受け取り、必要なデータをインスタンスの保護変数itemListに書き込みます。

itemListをインスタンス変数にするのではなく、ローカル変数として送信する必要がありますか? または、SQLiteStatementとインスタンス保護変数を作成する必要がありますか?

コードはどちらの方法でも機能しますが、何が最適かわかりません。
どんな助けでも大歓迎です!

4

1 に答える 1

1

itemList をインスタンス変数にするのではなく、ローカル変数として送信する必要がありますか? または、SQLiteStatement とインスタンス保護変数を作成する必要がありますか?

それはまさに寿命の問題です。メソッド呼び出しが行われた後もこれらの値を保持する必要がある場合は、それらをインスタンス値にする必要があります。そうでなく、メソッドの終了後に破棄する必要がある場合は、GC が処理できるようにメソッド ヘッダーで宣言します。

于 2013-08-19T07:34:36.207 に答える