2015-06-10 31 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 
      } 
     });