Ich möchte eine Methode schreiben, die eine angegebene Methode für ein geeignetes Objekt aufruft.
Der Vorbehalt ist, dass ich dies tun möchte, ohne die Klassen zu ändern (z. B. Implementierungsschnittstellen) von wo ich die Methode nenne.Java7: Was entspricht der Angabe von Methodenreferenzen in einem Funktionsaufruf?
Ich fand, was ich in Funktionszeiger in C suchte, aber nichts für Java 7 noch.
Hier einige Pseudo-Code:
public class A {
... constructor ...
public String aToString(){
return "A";
}
}
public class B {
... constructor ...
public String bToString(){
return "B";
}
}
/* T::<String>mymethod stands for "Method with identifier 'mymethod'
* in Class T with return type String"
*/
public class ServiceClass {
public static void genericToString(Collection<T> c,
MethodPointer T::<String>mymethod){
for(int i=0,i<c.length,i++) {
System.out.println(c.get(i).mymethod());
}
}
public static void main(){
ArrayList<A> listA = new ArrayList<A>();
listA.add(new A());
ServiceClass.genericToStringOutput(listA, A::<String>aToString);
ArrayList<B> listB = new ArrayList<B>();
listB.add(new B());
ServiceClass.genericToStringOutput(listB, B::<String>bToString);
}
}
Gibt es eine Möglichkeit 7 so etwas wie dies in Java zu erreichen? Die einzige Einschränkung besteht darin, dass Klasse A und B sich nicht ändern können.
Bonuspunkte, wenn Typen nicht vom Compiler ausgeblendet werden.
Sie könnten 8 ... –
zu Java wechseln möchten, können Sie Anbieter eine 'Funktion', entweder Ihre eigenen Schreiben "Funktion" -Schnittstelle oder [die von Guava] verwenden (https://google.github.io/guava/releases/19.0/api/docs/com/google/common/base/Function.html). –