Java Reference
In-Depth Information
else if (name === "subtract")
value = args[0] - args[1];
else if (name === "multiply")
value = args[0] * args[1];
else if (name === "divide")
value = args[0] / args[1];
throw new Error("Operation " + name +
" not supported.");
return value;
var calc = new JSInvoker(calcDelegate);
var x = 20.44, y = 30.56;
var addResult = calc.add(x, y); // Will call calcDelegate.invoke("add", [x, y])
var subResult = calc.subtract(x, y);
var mulResult = calc.multiply(x, y);
var divResult = calc.divide(x, y);
printf("calc.add(%.2f, %.2f) = %.2f%n", x, y, addResult);
printf("calc.sub(%.2f, %.2f) = %.2f%n", x, y, subResult);
printf("calc.mul(%.2f, %.2f) = %.2f%n", x, y, mulResult);
printf("calc.div(%.2f, %.2f) = %.2f", x, y, divResult);
The code creates an object named calcDelegate that contains an invoke() method.
The JSInvoker object wraps the calcDelegate object. When a function is called on the
calc object, the invoke() method of the calcDelegate object is called with the function
name as its first argument and function arguments passed as an array as the second
argument. The invoke() function performs addition, subtraction, multiplication, and
division on the arguments. The following command shows how to execute the code:
c:\>jrunscript -f jsinvokertest.js
calc.add(20.44, 30.56) = 51.00
calc.sub(20.44, 30.56) = -10.12
calc.mul(20.44, 30.56) = 624.65
calc.div(20.44, 30.56) = 0.67
The JSInvoker object works in Java 7 but generates the following error in Java 8
when you run this example. It seems to be a bug introduced in Java 8:
c:\>jrunscript -f jsinvokertest.js
script error in file jsinvoker.js : TypeError: [object JSAdapter] has no
such function "add" in jsinvoker.js at line number 25
Search WWH ::

Custom Search