# Delegate in Java



## Johnny2 (3. Mrz 2009)

Hab früher mit C# programmiert, bevor ich auf Java umgestiegen bin. In C# gibt's Delegate, die ab und zu recht nützlich waren. Gibt's sowas in der Art auch für Java?


----------



## 0x7F800000 (3. Mrz 2009)

[HIGHLIGHT="Java"]
//statt "delegate" einfach "interface" davorschreiben
public interface Delegate {
	int call(int x);
}

//test
public class _{
	public static void main(String[] args){
		Delegate f=new Delegate(){ public int call(int x){ return x*x; } };
		Delegate g=new Delegate(){ public int call(int x){ return 7*x+x*x*x; } };

		Delegate[] delegates={f,g};
		for(Delegate x:delegates){
			System.out.println(x.call(5));
		}
	}
}
[/HIGHLIGHT]
Ich kenne mich jetzt mit C# nicht aus, aber von dem was ich beim ersten googletreffer eben gesehen habe, ist das ziemlich dasselbe wie ein kleines Interface, nur dass delegates keine extra methode wie "eval" oder "call" oder "invoke" brauchen, sondern direkt mit Klammern aufrufen werden können. Ist das so?

Also, auf jeden fall ist das die Übliche vorgehensweise, um so etwas wie Funktionszeiger aus C++ in java darzustellen (allerdings sollte man einen sinnvolleren namen vergeben, als "Delegate", sonst stiftet das nur verwirrung)

Ansonsten, wenn du rein zum spaß irgendeine sprache für die JVM lernen willst, dann kannst du dir zB Scala anschauen, dort ist alles Objekt, ob Funktionen oder sonstwas. In diesem konkreten fall macht es praktisch nichts aus, diese eine Zeile zusätzlichen java-code kann man auf jeden Fall verkraften, auch wenn es auf den ersten Blick etwas gewöhnungsbedürftig erscheinen mag.
Ich kann dir versichern, es gibt in Java Sachen, die sind wesentlich befremdender^^


----------

