Die Antwort von @ sblundy ist großartig, aber anonyme innere Klassen weisen zwei kleine Fehler auf, wobei der primäre darin besteht, dass sie nicht wiederverwendbar sind und der sekundäre eine umfangreiche Syntax ist.
Das Schöne ist, dass sein Muster ohne Änderung in der Hauptklasse (die die Berechnungen durchführt) zu vollständigen Klassen erweitert wird.
Wenn Sie eine neue Klasse instanziieren, können Sie Parameter an diese Klasse übergeben, die als Konstanten in Ihrer Gleichung fungieren können. Wenn also eine Ihrer inneren Klassen so aussieht:
f(x,y)=x*y
aber manchmal brauchen Sie eine, die ist:
f(x,y)=x*y*2
und vielleicht ein dritter:
f(x,y)=x*y/2
Anstatt zwei anonyme innere Klassen zu erstellen oder einen "Passthrough" -Parameter hinzuzufügen, können Sie eine einzelne ACTUAL-Klasse erstellen, die Sie instanziieren als:
InnerFunc f=new InnerFunc(1.0);// for the first
calculateUsing(f);
f=new InnerFunc(2.0);// for the second
calculateUsing(f);
f=new InnerFunc(0.5);// for the third
calculateUsing(f);
Es würde einfach die Konstante in der Klasse speichern und sie in der in der Schnittstelle angegebenen Methode verwenden.
Wenn Sie wissen, dass Ihre Funktion nicht gespeichert / wiederverwendet wird, können Sie Folgendes tun:
InnerFunc f=new InnerFunc(1.0);// for the first
calculateUsing(f);
f.setConstant(2.0);
calculateUsing(f);
f.setConstant(0.5);
calculateUsing(f);
Aber unveränderliche Klassen sind sicherer - ich kann keine Rechtfertigung dafür finden, eine Klasse wie diese veränderlich zu machen.
Ich poste das wirklich nur, weil ich zusammenzucke, wenn ich anonyme innere Klasse höre - ich habe viel redundanten Code gesehen, der "Erforderlich" war, weil der Programmierer als erstes anonym ging, wenn er eine tatsächliche Klasse hätte verwenden sollen und niemals überlegte seine Entscheidung.