I have a project that makes extensive use of the Google Gson library. In this particular case, I have a JsonArray object (which implements iterable) containing a collection of objects. In pure JSON it would look like this:
[ 1, true, {"a": "b"}, [1,2] ] In Gson JsonElements, it looks like this: arr = new JsonArray(); arr.add(1); arr.add(true); obj = new JsonObject(); obj.addProperty("a", "b"); arr.add(obj); innerArr = new JsonArray(); innerArr.add(1); innerArr.add(2); arr.add(innerArr); I am calling a Javascript function in Nashorn that is trying to do a map over this array: nash.eval("function doIt(arr) { print(arr.map(function(item) { return (typeof item); })); }"); So, in order for this to work with my own arbitrary object (JsonArray), I believe I need to implement JSObject. I created the wrapper class that implements it, using the underlying JsonArray object as a delegate. things like isArray() and such are trivial, but I'm having trouble with the map. I have a map method that takes a functional interface which is available for the JsonArray object. Nashorn calls getMember("map") when the doIt function is executed. I cannot figure out how to give it an appropriate function reference to my JsonArray.map method. I was able to handle getMember("toString") easily enough, but the problem is that method doesn't take any arguments, so returning a simple Callable<Object> is fine for it, but map is going to take arguments that I don't know about ahead of time. I would really appreciate some assistance here. Thanks. -Daniel