-1

a のインスタンスがありJSONArray、for-each コンストラクトを使用して各要素を順番に処理できるかどうかに興味がありました。だから私は試しました:

for( Object jsonObj: jsonArray ) {
  System.out.println("JSONArray element: '" + ((JSONObject)jsonObj).toString() + "'");
}

驚いたことに、うまくいきました。Iterable を実装するクラスを扱う必要があると思いました。

私の最初の質問に ( for-each on を使用してJSONArray) 答えていただければ幸いです。また:

  • 2 番目の質問: なぜ機能するのですか?
  • 3 番目の質問: これを出荷コードで実際に使用することに慎重になる必要がありますか?

皆さんありがとう!

4

2 に答える 2

0

ご存じかもしれませんが、 for each ループは Iterables と arrays に対してのみ機能します

JSONArray の元の json.org 実装はiterable を実装していませんが、 @ Quirim と @BrianRoach が指摘しているように、 Gson 実装は実装しています。

json.org バージョンで実装するつもりでしたが、結局実装しませんでした。

だからあなたの3つの質問に答えるために:

  1. イテラブルを実装する Gson または同様の JsonArray の実装を使用する必要があります。
  2. JsonArray は Iterable であるためです。
  3. いいえ、すべきではありません。
于 2013-02-25T16:37:44.907 に答える
0

for-each ループ構文は Java 1.5 で導入されました。その目的は、イテレータなどの明白なものからコードをきれいにすることです。また、エラーの可能性を遮断します。

この種のループステートメントはIterableクラスでのみ機能します。質問に答えるために、それはインターフェイスJsonArrayを実装しているためです。Iterable

あなたのコードに関しては、あなたが正確にjsonObjのタイプでありJSONObject、それがObject. このようにして、エラーが発生しやすいタイプのキャストをループの本体から排除できます。

于 2013-02-25T16:24:28.283 に答える