Muepe32
Erfahrenes Mitglied
Hallo zusammen,
Wie ich im Netz lesen konnte ist es in Java momentan nicht möglich Funktionszeiger zu verwenden. Da ich bis vor wenigen Tagen noch praktisch nur in C# programmiert habe ist das natürlich für mich ein ziemlich grosser Schock, da mit anonymen Delegaten und anderem das Konzept der Funktionszeiger in C# sozusagen auf die Spitze getrieben wurde und ich dies auch gerne verwende.
Nun habe ich mich also gefragt was es denn für gute Alternativen gäbe. Als Beispiel habe ich folgende Situation:
Während sich hier das ganze noch relativ in Grenzen hält und über einen switch oder ein if realisierbar ist (opcode 0 -> handleLogonInit, opcode 1 -> handleLogonProof) ist es natürlich verständlich, dass in späteren Stadien meines Protokolls viel mehr hinzukommen wird. Ich würde jetzt eigentlich gerne eine assoziative Verbindung opcode -> Handlerfunktion machen.
Ich habe mal eine Variante mit anonymer Klasse gemacht, diese ist aber vom Schreibaufwand her auch nicht gerade schonend
Gibt es da noch kürzere oder elegantere Versionen?
Grüsse
Muepe
Wie ich im Netz lesen konnte ist es in Java momentan nicht möglich Funktionszeiger zu verwenden. Da ich bis vor wenigen Tagen noch praktisch nur in C# programmiert habe ist das natürlich für mich ein ziemlich grosser Schock, da mit anonymen Delegaten und anderem das Konzept der Funktionszeiger in C# sozusagen auf die Spitze getrieben wurde und ich dies auch gerne verwende.
Nun habe ich mich also gefragt was es denn für gute Alternativen gäbe. Als Beispiel habe ich folgende Situation:
Java:
class LogonClient {
protected void handleLogonInit(byte[] data) {
}
protected void handleLogonProof(byte[] data) {
}
@Override
protected void OnDataReceived(byte[] data) {
if(data == null || data.length == 0)
return;
int opcode = data[0];
}
}
Während sich hier das ganze noch relativ in Grenzen hält und über einen switch oder ein if realisierbar ist (opcode 0 -> handleLogonInit, opcode 1 -> handleLogonProof) ist es natürlich verständlich, dass in späteren Stadien meines Protokolls viel mehr hinzukommen wird. Ich würde jetzt eigentlich gerne eine assoziative Verbindung opcode -> Handlerfunktion machen.
Ich habe mal eine Variante mit anonymer Klasse gemacht, diese ist aber vom Schreibaufwand her auch nicht gerade schonend

Java:
class LogonClient {
private static HashMap<Integer, IPacketFunction> mPacketFunctions;
private interface IPacketFunction {
public void execute(byte[] data, LogonClient client);
}
static {
mPacketFunctions = new HashMap<Integer, IPacketFunction>();
mPacketFunctions.put(0, new IPacketFunction() { public void execute(byte[] data, LogonClient client) { client.handleLogonInit(data); } });
}
}
Gibt es da noch kürzere oder elegantere Versionen?
Grüsse
Muepe