(See horb/examples/interfaceSend for example code.)
Java allows the use of an interface as a type. Consider the following interface and class.
// Data.java package horb.examples.interfaceSend; import horb.orb.*; import java.io.*; public interface Data { public void work_Local(); public void list_Local(PrintStream ps); } // Server.java package horb.examples.interfaceSend; public class Server { Data work(Data data) { data.work_Local(); return data; } }
An object implementing interface Data can be passed to Server.work() as an argument. HORB treats such feature correctly when Server.work() is remotely called. Let's assume two classes, 1) TwoD, a two dimensional array, and 2) Triangle, a triangular array that are implementation classes of interface Data. Here is a list of Triangle.
// Triangle.java package horb.examples.interfaceSend; import java.io.*; /** triangular array */ public class Triangle implements Data { public double data[][]; Triangle() {} // this is required. Triangle(int n) { int x = 0; data = new double[n][]; for (int i = 0; i < n; i++) { // initialize array data[i] = new double[i]; for (int j = 0; j < i; j++) data[i][j] = x++; } } public void work_Local() { for (int i = 0; i < data.length; i++) for (int j = 0; j < data[i].length; j++) data[i][j] *= 2; // repeat gag } public void list_Local(PrintStream ps) { . . .} }
TwoD and Triangle can be treated as the same type in remote method call.
. . . Server_Proxy server = new Server_Proxy(HorbURL(somewhere)); Data data1 = new TwoD(8); server.work(data1); Data data2 = new Triangle(8); server.work(data2);
Data must be compiled with the HORBC compiler to generate Data_Proxy and Data_Skeleton. (Try examples in examples/interfaceSend.)
Here is another example:
class Param { public Data data; }
When an instance of this class is passed, HORB transfers the instance variable data as an instance of an implementation class of interface Data.