2015-06-10 290 views
1
import org.json.*; 
import org.json.JSONObject; 

import java.util.Iterator; 

/** 
* Created by nubuntu on 10/06/2015. 
*/ 
public class Object { 
    private Callback callback; 
    static void each(JSONObject json,Callback callback){ 
     Iterator<?> keys = json.keys(); 
     while(keys.hasNext()) { 
      String key = (String)keys.next(); 
      try { 
       callback.run(key,json.get(key)); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
    static void each(JSONArray json,Callback callback){ 
     for(int i=0;i<json.length();i++){ 
      JSONObject obj = null; 
      try { 
       obj = json.getJSONObject(i); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      callback.run(obj); 
     } 
    } 
    public interface Callback{ 
     public void run(String key, java.lang.Object o); 
    } 
    // Error : Duplicate Class 
    public interface Callback{ 
     public void run(java.lang.Object o); 
    } 

} 

我想實現「每個」像jQuery的的JSONObject & JSONArray,也許許多其他對象後,使用 例如:Java動態類型如何?

 JSONObject jsonobject= new JSONObject("hair":"black","eye":"blue"); 
     Object.each(jsonobject,new Object.Callback() { 
      @Override 
      public void run(String key, Object o) { 
       Log.d(key,o.toString()); 
      } 
     }); 

但是當我想創建第二個回調,它無法複製像以上靜態每種方法, 那麼如何處理每個動態類型?

回答

0

在機器人的情況下,我認爲,如果你改變如下的代碼將工作:

public interface Callback{ 
    public void run(String key, java.lang.Object o); 
    public void run(java.lang.Object o); 
} 

each功能了,因爲你的Callback,不是因爲它本身的接口錯誤。

0

它應該是不同接口的不同名稱。

public interface CallbackKeyValue { 
    public void run(String key, java.lang.Object o); 
} 

public interface CallbackValue { 
    public void run(java.lang.Object o); 
} 

JAVA8中的Lambda表達式不需要任何接口名稱。

Object.each(jsonobject, (key, o) -> 
    Log.d(key, o.toString()) 
); 
+0

謝謝,你能建議我鏈接學習Lamda表達式嗎? –

+0

請參閱[Lambda表達式](https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html)。有通常的標準接口。 'BiConsumer '和'Consumer ' – saka1029

0

哇,我怎麼能錯過這個簡單的解決方案,謝謝@Kingfisher

但現在,如何避免其他無用的「跑」的方法,回調只是需要一個run方法執行

 JSONObject jsonobject= new JSONObject("{'hair':'black','eye':'blue'}"); 
     Object.each(jsonobject, new Object.Callback() { 
      @Override 
      public void run(String key, java.lang.Object o) { 
       // Code run here.... 
      } 

      @Override 
      public void run(java.lang.Object o) { 
       // useless 
      } 
     });