2

メソッド呼び出しによって返されるリストの浅いコピーを作成したい (これは Android からの public List getScanResults () です。http://developer.android.com/reference/android/net/wifi/WifiManager.html#を参照してください) getScanResults%28%29 )。問題は、 clone() が List インターフェイスでは定義されておらず、ArrayList のような具体的なクラスでのみ定義されていることです。これ?それから私は次のようなことを考えました

anExistingList.add(getScanResults());

しかし、 getScanResults() は、返すものが何もない場合、空のリストではなく null を返すように見えるため、これもオプションではありません。私が何かをするとき

if(getScanResults() != null)
    anExistingList.add(getScanResults());

getScanResults() の戻り値は、最初のコード行と 2 番目のコード行の間で変化する可能性があるため、最初に「not equals null」条件を渡し、次に 2 行目で null になる可能性がありますか、これについて間違っていますか?

では、getScanResults() の戻り値の浅いコピーを作成する方法、または目標を定式化する方法: getScanResults() から値を取得し、作業中に値が変更されないようにする方法を教えてください。

ヒントをありがとう:-) (何か間違ったことを理解しているだけだと思います)

4

3 に答える 3

1

ここを見てください。あるリストから別のリストに内容をコピーするjava.util.Collections静的メソッドを提供します。copy

于 2011-05-11T16:04:07.663 に答える
1

適切に動作するすべてのコレクションには、コピー コンストラクターがあります。したがって、必要に応じて、必要なタイプのリストのインスタンスを作成します (たとえば、高速なインデックス作成や一部の要素の効率的な削除など)。

この場合、null の可能性による不都合を処理するために、もう少し処理を行う必要があります。だから、このようなもの:

/**
 * @return a copy of the original; an empty list if original is null.
 */
public static <T> List<T> randomAccessibleCopy(List<T> original) {
    return (null == original) 
             ? Collections.<T>emptyList() 
             : new ArrayList<T>(original);
}

これで、リストを返す基になる API の結果を使用してこのメ​​ソッドを呼び出すことができます。

于 2011-05-11T16:11:27.930 に答える
0
if(getScanResults() != null)
    anExistingList.add(getScanResults());

する必要があります

List x = getScanResults();
if(x != null)
    anExistingList.add(x);

メソッドは一度しか呼び出されないため、その間は変更できません。

于 2011-05-11T16:12:12.393 に答える