0

我想用自定义对象使我的 ArrayList 成为最终对象,以便对象在设置后无法更改。

我试图这样声明它:

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);

但 Eclipse 说The final field XMLDetailsActivity.XML cannot be assigned

问题是什么?

4

4 回答 4

2

final关键字只是意味着对对象的引用不能更改。然而,这并不意味着您不能调用对象的方法来更改其状态。

这可以通过使用 list 来实现Collections.unmodifiableList()

于 2012-09-19T11:54:41.033 回答
1

您的 XML 变量是final,但您尝试为其分配另一个值: XML = ...in.readObject();您不能这样做。

另外请注意,最终的 ArrayList 意味着您不能替换 ArrayList,您仍然可以调用其方法来修改其内容,final 不是 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 回答