アロン:
私はここで、ジェネリック医薬品へのかなり新しいだといくつかの支援をしたいと思います。
私は、ジェネリックとジェネリックメソッドを作成しようとしているPredicate
、ジェネリックjava.util Function
、ジェネリックList
引数として。この方法は、このようなものです:
public static <T> T getValue(Predicate<? super Object> condition, Function<? super Object, ? extends Object> mapper, T elseResult, List<T> table) {
T result = null;
if (table != null)
result = table.stream()
.filter(condition)
.map(mapper).findAny().orElse(elseResult); // Syntax error here.
else
result = elseResult;
return (T) result;
}
私は、上のエラーを取得していますorElse(elseResult)
方法。これは誤りであります-
The method orElse(capture#1-of ? extends Object) in the type Optional<capture#1-of ? extends Object> is not applicable for the arguments (T).
私は、このエラーが何であるかにと正確にはわかりません。だから、誰かが、私はここで間違ってやっているものを私に言うことができますか?ありがとうございました。
彼らは次のとおりでした:
あなたはmapper
あなたのように何かを返すことができるorElse
方法は必ずしも戻りませんT
。
あなたが変更した場合mapper
にはFunction<T,T> mapper
、あなたのコードはコンパイルを通過します。
あなたのマッパーが異なる型を返すことができるようにしたい場合は、2番目の型引数を追加します。
public static <T,S> S getValue(Predicate<? super Object> condition, Function<T,S> mapper, S elseResult, List<T> table) {
S result = null;
if (table != null)
result = table.stream()
.filter(condition)
.map(mapper).findAny().orElse(elseResult);
else
result = elseResult;
return result;
}