2016-09-14 2 views
0

を入力失います次のエラーで失敗します。Javaの8ストリームは、私は特定の条件に一致するオブジェクトを選択するには、次のストリームを持っている情報

フィルタをpm-> trueに変更すると、ストリームが再び機能します。何がこの動作を引き起こし、これを避ける方法はありますか?それはおそらく、渡される '注釈'クラスと関係があります。問題を修正するかどうかを確認するために最終的な修飾子を渡そうとしました。

これはgetAnnotationメソッドのシグネチャです:

public final <T extends Annotation> T getAnnotation(Class<T> annotationClass) 
+3

genericsを含む "propertyMappings"変数の宣言を含めることはできますか?私。地図。 – lars

+1

私が正しく理解していれば、 'T extends Annotation'はあなたがしようとしているように' Class 'を変換することを許可しません。 'T'のサブクラスを返すと、親クラス' T'を渡すときにこの変換に問題が発生します。 – px06

+2

あなたのコードから、ストリームの最後にある戻り値の型にフィルタが影響を与える理由がわかりません。あなたは[mcve]を投稿できますか? – khelwood

答えて

5

私が見ることができる明白な問題は、あなたがClass<T>どこ<T extends Annotation>を期待メソッドに引数として平野Class変数を渡すようにしようとしているということです。私は、コンパイラがそのメソッド呼び出しを完全に理解できず、ストリームチェーンの最後にコンパイルエラーが発生していると思います。それを修正すれば、あなたの謎の問題は消えるかもしれません。

このような何か:

public <T extends Annotation> List<PropertyMapping> 
    getPropertyMappingsByAnnotation(Class<T> annotation) { 
+0

はい、最も優雅な方法で問題を解決します。ありがとうございました。 – Wytze

0

うーん、ここに集まるんが、それは(のArrayList/LinkedListの)を生成する必要があるリストの種類を知っていますか?

これがうまくいかない場合は、おそらくワイルドカードをClass引数に追加してみてください。

関連する問題