User Tools

Site Tools


at:tutorial:symbiosis

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revisionBoth sides next revision
at:tutorial:symbiosis [2007/06/20 10:51] jdedeckerat:tutorial:symbiosis [2007/06/20 14:19] jdedecker
Line 67: Line 67:
 ==== Invoking AmbientTalk methods in Java ==== ==== Invoking AmbientTalk methods in Java ====
 When an AmbientTalk object is passed as an argument to a Java method expecting an object of an interface type, the AmbientTalk object will appear to Java objects as a regular Java object implementing that interface. Hence, messages sent to this wrapped AmbientTalk object appear as regular Java method invocations on an interface type. For example, the action listener in the chat example can be notified as if it were a normal Java object by performing **listener.actionPerformed(event)**. When an AmbientTalk object is passed as an argument to a Java method expecting an object of an interface type, the AmbientTalk object will appear to Java objects as a regular Java object implementing that interface. Hence, messages sent to this wrapped AmbientTalk object appear as regular Java method invocations on an interface type. For example, the action listener in the chat example can be notified as if it were a normal Java object by performing **listener.actionPerformed(event)**.
 +
 +<code>
 +package at.tutorial;
 +
 +public class SymbiosisDemo {
 + public interface PingPong {
 + public int ping();
 + public int pong();
 + }
 +
 + public int run(PingPong pp) {
 + return pp.ping();
 + }
 +
 + public int run2(PingPong pp) {
 + return pp.pong();
 + }
 +
 +}
 +</code>
 +
 +<code>
 +def SymbiosisDemo := jlobby.at.tutorial.SymbiosisDemo;
 +
 +def showSymbiosis() {
 + def javaDemo := SymbiosisDemo.new();
 +
 + def atObject := object: {
 + def ping() { system.println("ping!"); javaDemo.run2(self); };
 + def pong() { system.println("pong!"); 42 }
 + };
 +
 + javaDemo.run(atObject);
 +};
 +
 +self
 +</code>
  
 If Java invokes a method declared in an interface with an overloaded method signature, all overloaded invocations are transformed into the same method invocation on the AmbientTalk object. In other words, the AmbientTalk object does not take the types into consideration. However, if the Java method is overloaded based on arity, the AmbientTalk programmer can take this into account in the parameter list of the corresponding AmbientTalk method, by means of a variable-argument list or optional parameters. Otherwise, the Java invocation may fail because of an arity mismatch. If Java invokes a method declared in an interface with an overloaded method signature, all overloaded invocations are transformed into the same method invocation on the AmbientTalk object. In other words, the AmbientTalk object does not take the types into consideration. However, if the Java method is overloaded based on arity, the AmbientTalk programmer can take this into account in the parameter list of the corresponding AmbientTalk method, by means of a variable-argument list or optional parameters. Otherwise, the Java invocation may fail because of an arity mismatch.
at/tutorial/symbiosis.txt · Last modified: 2013/05/17 20:25 by tvcutsem