2016-03-22 10 views
2

Methodメソッドの指定されたゲッターメソッドに基づくリフレクションを使用してセッターメソッドを取得するメソッドシグネチャーがあります。この方法の 署名は以下の通りです:collectors-map-java8内のラムダクラスのクラスタイプ

Method getSetter(final Method getterMethod, final Class classType) 

今、私は関連するsetterメソッドへのgetterメソッドのマップをしたいクラスのメソッドから。私のコードは以下の通りです:私はgetSetter(メソッド、するClassType) でコンパイルエラーを取得しています

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

それは間違って最初の型引数が見つかり言う:<lambda parameter>、必要:java.lang.reflect.Method

は、私はまたのための型を指定しようとしましたラムダパラメータ。下記を参照してください

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

ここでは、機能的なインターフェイスの種類を推論することはできません。

+0

これを再現することはできません。 https://ideone.com/xt5Fb6輸入品を確認し、Javaの正確なバージョンと使用しているコンパイラを指定してください。 –

+0

おかげさまで!実際にはgetSetterメソッドのために私はNoSuchMethodExceptionを投げていました。代わりにtry catchブロックを作成しておくべきです。私が変更され。出来た。 – Sampath

答えて

0

あなたのコードは、javac 8u25、u40、u60、u71、およびecj 3.10.2で正常に動作します。ここでの唯一の問題は、警告を発行するraw Classパラメータです。 <?>でパラメータ化する必要があります。

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