# RemoteExecutable



## OliverH (14. Mrz 2005)

ich habe folgende Anforderung:

beim eintreffen eines Objektes auf dem server socket, das das Interface remoteExecutable (siehe unten) implementiert hat, soll dessen run()-methode ausgeführt werden.

das interface remoteexecutable:

```
import java.io.Serializable;
public interface RemoteExecutable extends Serializable{
 public void run();
}
```

ich möchte auf dem server socket das object o über readObject einlesen und dann den auf der server-seite die run-methode starten.


```
in = new ObjectInputStream(s.getInputStream()); s ist socket
synchronized(in){
o = in.readobject()
}
```

o.run() geht will aber nicht, weiss einer, was ich beachten muss?


----------



## meez (14. Mrz 2005)

Du musst noch casten:



```
in = new ObjectInputStream(s.getInputStream()); s ist socket
try {
  RemoteExecutable re = (RemoteExecutable) in.readobject();
} catch (ClassCastException e) {}
```


btw. Synchronized kannst du weglassen....da sinnlos.


----------



## OliverH (14. Mrz 2005)

danke! das funktioniert jetzt immerhin schon einmal.

jetzt noch das letzte konvertierungsproblem:

angenommen ich weiss nicht von welchen typ das eingehende objekt ist, wie erzeuge ich dann aus object das passende object (in meinem fall remoteexecutable)?

möchte sowas wie class c = o.getClass() machen und danach das object o nach remoteexecutable casten, um dann abhängig vom typ des eingehenden objektes unterschiedliche methoden aufrufen zu können.

kurz: wie kann ich ein objekt vom typ object zur laufzeit in seinen korrekten typ (den ich nicht kenn, weiss nur, dass es eine run()-methode hat)umwandeln und dann anschliessend die run()-methode ausführen.


----------



## meez (14. Mrz 2005)

Du kannst nicht dynamisch casten...
Du kannst aber sowas machen...

```
if (o instanceof BlaBla) {
   ...
}
```


----------

