我正在Kotlin中使用Json-Simple。
在什么情况下会进行这种转换:
成为危险的对象?
在什么情况下会进行这种转换:
val jsonObjectIterable = jsonArray as Iterable<JSONObject>
成为危险的对象?
jsonArray
是一个JSONArray
对象。val jsonObjectIterable = jsonArray as Iterable<JSONObject>
jsonArray
是一个JSONArray
对象。Iterable
。但它不能确保 JSONArray 中的每个元素都是 JSONObject。
JSONArray 是一个 原始类型 List
,这意味着它可以添加任何东西,例如:val jsonArray = JSONArray()
jsonArray.add("string")
jsonArray.add(JSONArray())
JSONArray
向下转换的泛型类型Iterable<JSONObject>
进行操作时,可能会抛出ClassCastException
异常,例如:val jsonObjectIterable = jsonArray as Iterable<JSONObject>
// v--- throw ClassCastException, when try to cast a `String` to a `JSONObject`
val first = jsonObjectIterable.iterator().next()
MutableList<JSONObject>
,例如:@Suppress("UNCHECKED_CAST")
val jsonArray = JSONArray() as MutableList<JSONObject>
// v--- the jsonArray only can add a JSONObject now
jsonArray.add(JSONObject(mapOf("foo" to "bar")))
// v--- there is no need down-casting here, since it is a Iterable<JSONObject>
val jsonObjectIterable:Iterable<JSONObject> = jsonArray
val first = jsonObjectIterable.iterator().next()
println(first["foo"])
// ^--- return "bar"
data class Person( val ID: Int, val name: String): Serializable
val gson = Gson()
val persons: Array<Person> = gson.fromJson(responseSTRING, Array<Person>::class.java)
JSONObject
和JSONArray
,还包括string
、boolean
和number
。另外,一个JSONArray
也可以添加任何类型的Object
,例如:添加另一个 JSON 数组add(JSONArray())
。 - holi-java