2016-01-16 2 views
0

Могу ли я изменить значение внутри метода сравнения? Ошибка - переменная должна быть объявлена ​​окончательной, но последняя не позволит мне меняться. Я хочу сравнить некоторые другие переменные JSONarray (например, total_transit_time, total_walking_time). я не могу думать о другом решении. может ли кто-нибудь научить меня более простой способ сделать это?Невозможно изменить значение имени переменной?

public JSONArray findShortest(JSONObject json_object) throws JSONException { 
    JSONArray sortedJsonArray = new JSONArray(); 
    List<JSONObject> jsonList = new ArrayList<JSONObject>(); 
    for (int i = 0; i < json_object.length(); i++) { 
     int name = i; 
     JSONObject json_array = json_object.optJSONObject(""+name); 
     jsonList.add(json_array); 
    } 
    System.out.println("jsonList = " + jsonList.toString()); 

    Collections.sort(jsonList, new Comparator<JSONObject>() { 

     public int compare(JSONObject a, JSONObject b) { 
      String valA = new String(); 
      String valB = new String(); 

      try { 
       valA = String.valueOf(a.get("total_duration")); 
       valB = String.valueOf(b.get("total_duration")); 
      } catch (JSONException e) { 
       //do something 
      } 

      return valA.compareTo(valB); 
     } 
    }); 

к этому

public JSONArray findShortest(JSONObject json_object, String sortByThisElement) throws JSONException { 
    ...... 

      ...... 

      try { 
       valA = String.valueOf(a.get(sortByThisElement)); 
       valB = String.valueOf(b.get(sortByThisElement)); 
      } catch (JSONException e) { 
       //do something 
      } 
      ...... 
     } 
    }); 
+0

[Почему только конечные переменные доступны в анонимном классе?] (Http://stackoverflow.com/questions/4732544/why-are-only-final-variables-accessible-in-anonymous-class) –

+0

Простым способом является объявление ваша переменная глобально. –

ответ

0

Вы можете объявить sortByThisElement быть окончательным, то вы можете использовать его непосредственно:

public JSONArray findShortest(JSONObject json_object, final String sortByThisElement) throws JSONException { 
...... 

     ...... 

     try { 
      valA = String.valueOf(a.get(sortByThisElement)); 
      valB = String.valueOf(b.get(sortByThisElement)); 
     } catch (JSONException e) { 
      //do something 
     } 
     ...... 
    } 
}); 

другой путь, создать окончательную переменную в вашем метод, затем посетите его по вашему методу:

public JSONArray findShortest(JSONObject json_object, String sortByThisElement) throws JSONException { 
...... 

     ...... 
     System.out.println("jsonList = " + jsonList.toString()); 
     final String sortByThis = sortByThisElement;//note this should be add before Collections.sort 
     ........ 
     try { 
      valA = String.valueOf(a.get(sortByThis)); 
      valB = String.valueOf(b.get(sortByThis)); 
     } catch (JSONException e) { 
      //do something 
     } 
     ...... 
    } 
}); 
Смежные вопросы