0

オブジェクトが設定された後に変更できないように、カスタム オブジェクトを使用して ArrayList を final にしたいと考えています。

私は次のように宣言しようとしました:

private final ArrayList<Datapoint> XML = new ArrayList<Datapoint>();

ArrayList に次の行を入力します。

FileInputStream fileIn = new FileInputStream(f);
ObjectInputStream in = new ObjectInputStream(fileIn);
XML = (ArrayList<Datapoint>) in.readObject();
in.close();
fileIn.close();

オブジェクトを表示するためのこの for ループ:

for(int i=0;i<XML.size();i++){
                    item = XML.get(i);      
                    parsedData = parsedData + "----->\n";
                    parsedData = parsedData + "Name: " + item.getName() + "\n";
                    parsedData = parsedData + "stateBased: " + item.getStateBased() + "\n";
                    parsedData = parsedData + "mainNumber: " + item.getMainNumber() + "\n";
                    parsedData = parsedData + "dptID: "+ item.getDptID() + "\n";
                    parsedData = parsedData + "Groupadress: "+ item.getGroupadress() + "\n";
                    parsedData = parsedData + "priority: "+ item.getPriority() + "\n";
                }

xmlOutput.setText(parsedData);

しかし、エクリプスは言いThe final field XMLDetailsActivity.XML cannot be assignedます。

何が問題ですか?

4

4 に答える 4

2

finalキーワードは、オブジェクトへの参照を変更できないことを意味します。ただし、状態を変更するオブジェクトのメソッドを呼び出せないという意味ではありません。

これは、リストに対して を使用して実現できますCollections.unmodifiableList()

于 2012-09-19T11:54:41.033 に答える
1

あなたの XML 変数は ですがfinal、それに別の値を割り当てようとしています XML = ...in.readObject();。それはできません。

また、最終的な ArrayList は ArrayList を置き換えることができないことを意味し、そのメソッドを呼び出して内容を変更することもできます。最終的なものは C++ のものではありませんconst

于 2012-09-19T11:54:21.910 に答える
0

変数にfinal値が割り当てられると、別の値を割り当てることはできなくなります。

メンバー変数は、finalそれらが属するクラスのコンストラクターの実行が完了する前に、値を割り当てる必要があります。

于 2012-09-19T11:54:33.123 に答える
0

XML 変数に新しい値を割り当てようとしています。これより前に final を宣言しているため、再割り当てすることはできません。

于 2012-09-19T11:54:38.663 に答える