2016-03-22 4 views
2

Ich habe eine Methodensignatur zum Abrufen der Setter-Methode unter Verwendung von Reflektion basierend auf einer gegebenen Getter-Methode vom Typ Method. Unterschrift des Verfahrens ist unter:Klassentyp in Lambda innerhalb von Collectors-map-java8

Method getSetter(final Method getterMethod, final Class classType) 

nun von der Methode für eine Klasse-I-Karte von Getter-Methode zugeordnet Setter-Methode wollen. Mein Code ist unten:

final Method[] methods = classType.getMethods(); 
     Stream.of(methods) 
       .filter(ReflectionUtils::isGetter) 
       .collect(Collectors.toMap(Function.identity(), (method) -> getSetter(method, classType))); 

ich bei getSetter Kompilierungsfehler bin immer (Methode, Classtype) Es sagt Wrong erste Art Argument gefunden: <lambda parameter>, erforderlich: java.lang.reflect.Method

Ich habe auch versucht, den Typ für die Angabe Lambda-Parameter. Siehe unten

Stream.of(methods) 
       .filter(ReflectionUtils::isGetter) 
       .collect(Collectors.toMap(Function.identity(), (Method method) -> getSetter(method, classType))); 

Jetzt heißt es nicht, funktionale Schnittstelle Typ abzuleiten.

+0

ich kann dies nicht reproduzieren. https://ideone.com/xt5Fb6 Bitte überprüfen Sie Ihre Importe, spezifizieren Sie die genaue Version von Java und welchen Compiler Sie benutzen. –

+0

Hey danke !! Eigentlich für die getSetter Methode, die ich NoSuchMethodException geworfen habe, hätte ich stattdessen einen catch block versuchen sollen. Ich habe mich verändert. Es funktionierte. – Sampath

Antwort

0

Ihr Code funktioniert gut mit javac 8u25, u40, u60, u71, sowie ecj 3.10.2. Das einzige Problem hier ist der rohe Class Parameter, der eine Warnung ausgibt. Es sollte mit <?>:

Method getSetter(final Method getterMethod, final Class<?> classType) { ... } 
Verwandte Themen