为什么在Android中的json解析中使用length()来获取数组的大小?

时间:2015-10-02 04:59:09

标签: java android

虽然我们通常使用长度变量来获取数组的大小 例如,这是一个片段

JSONObject jsonData = new JSONObject(getmData());
JSONArray itemsArray = jsonData.getJSONArray(FLICKR_ITEMS);
for (int i= 0;i<itemsArray.length();i++) {
    JSONObject jsonPhoto =itemsArray.getJSONObject(i);
    String title = jsonPhoto.getString(FLICKR_TITLE);
    String author = jsonPhoto.getString(FLICKR_AUTHOR);
}

2 个答案:

答案 0 :(得分:2)

这是因为您没有访问数组,而是在JSONArray上调用方法。

允许直接字段访问是一种不好的做法,因为它会破坏继承,阻止您控制谁可以设置其值,禁止同步等需要这样的事情,因此长度字段通过方法公开。请参阅Effective Java 2nd ed Item 14:

  

在公共课程中,使用访问者方法,而不是公共字段

答案 1 :(得分:0)

普通内置数组的length成员是最终成员,因此可以直接安全地公开。您可以尝试更改它,但编译器不会让您。

但是JSONArray是动态的,这意味着它的长度可以通过添加或删除项目来改变。直接暴露长度变量是不安全的,因为你可以改变它,可能会破坏导致异常,未定义或意外行为等的对象。例如,在你改变长度之后如何访问20th项目5

相反,只提供了一个访问器方法length()来获取长度。在调用会影响其大小的方法(例如JSONArrayput()时,remove()类会在内部管理length变量。

您可以将其与常规List进行比较。通过调用size()方法获得它的长度。出于同样的原因,它的设计是这样的。