2

SparseArrayを反復処理して、いくつかの項目を削除しようとしています。

プライベート SparseArray レコード。

   int size = record.size();
        for (int index = 0; index < size; index++) {
            if (record.valueAt(index) < threshold){
                record.delete(record.keyAt(index));
            }
        }

でもイテレーションの途中でアイテムを外すとサイズが変わってしまうので使えません。事前にスパース配列のクローンを作成しようとしました。しかし、日食は私にエラーを与えます

The method clone() from the type object is not visible

しかし、SparseArray の api doc とソース コードの両方が、それが存在し、公開されていることを示しています。また、メソッドクローンには注釈があります@SuppressWarnings("unchecked")

抑制はメソッドの可視性を変更しますか?
これを解決する方法や SparseArray のクローンを作成する方法を知っている人はいますか?

4

5 に答える 5

2

このように配列のサイズを取得してみませんか? それとも、レコードを削除するたびにサイズを使用しますか?

    for (int index = 0; index < record.size(); index++) {
        if (record.valueAt(index) < threshold){
            record.delete(record.keyAt(index));
            index--;
        }
    }
于 2012-08-28T06:45:50.183 に答える
2

SDK 14 の Android API の変更によると、SparseArrayが含まれるように変更されてpublic cloneいることがわかりました。

編集

私のプロジェクトでは、SB アレイ用に独自のクローン コードを実装しました:ソース コードはこちら

于 2012-08-28T06:38:14.017 に答える
1

Cloneメソッドはクラスに対して保護されてObjectいるため、どのクラスでも明示的に提供する必要がありますが、このメソッドはドキュメントに表示され、ソースコードには表示されません。MyAPI Level10で docsAPI levelはのよう16です。ですので、まずはご確認くださいAPI Level

@SuppressWarnings("unchecked")CloneのメソッドがObject返されるためですObject。ドキュメントからのように、変換するSparseArray<E>メソッド内で安全でないキャストが返されるようですObjectSparseArray<E>

于 2012-08-28T06:42:41.890 に答える