虽然我们通常使用长度变量来获取数组的大小 例如,这是一个片段
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);
}
答案 0 :(得分:2)
这是因为您没有访问数组,而是在JSONArray
上调用方法。
允许直接字段访问是一种不好的做法,因为它会破坏继承,阻止您控制谁可以设置其值,禁止同步等需要这样的事情,因此长度字段通过方法公开。请参阅Effective Java 2nd ed Item 14:
在公共课程中,使用访问者方法,而不是公共字段
答案 1 :(得分:0)
普通内置数组的length
成员是最终成员,因此可以直接安全地公开。您可以尝试更改它,但编译器不会让您。
但是JSONArray
是动态的,这意味着它的长度可以通过添加或删除项目来改变。直接暴露长度变量是不安全的,因为你可以改变它,可能会破坏导致异常,未定义或意外行为等的对象。例如,在你改变长度之后如何访问20th
项目5
。
相反,只提供了一个访问器方法length()
来获取长度。在调用会影响其大小的方法(例如JSONArray
和put()
时,remove()
类会在内部管理length变量。
您可以将其与常规List
进行比较。通过调用size()
方法获得它的长度。出于同样的原因,它的设计是这样的。