功能抽象:
public abstract class Function<X, Y> {
abstract Y apply(X x);
}
Run Code Online (Sandbox Code Playgroud)
max 方法实现
public static <V extends Comparable<V>> Function<List<V>, V> max() {
return new Function<List<V>, V>() {
@Override
public V apply(List<V> list) {
return Collections.max(list);
}
};
}
Run Code Online (Sandbox Code Playgroud)
和用法(它应该是什么样子)
Date result = max().apply(datesList);
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误,不明白它为什么需要 Object
incompatible types; inferred type argument(s) java.lang.Object do not conform to bounds of type variable(s) V
found : <V>project.Function<java.util.List<V>,V>
required: java.lang.Object
Run Code Online (Sandbox Code Playgroud)
我已经阅读了大量类似的质量保证,但没有得到如何解决这个问题.谢谢.
Jes*_*per 13
Java的类型推断非常有限.如果你这样写:
Date result = max().apply(datesList);
Run Code Online (Sandbox Code Playgroud)
这是不够成熟的推断的类型参数max()的方法,V,所以需要java.lang.Object代替.你可以试试这个:
Function<List<Date>, Date> fn = max();
Date result = fn.apply(dates);
Run Code Online (Sandbox Code Playgroud)
或者,如果要将其写在一行中,则可以执行以下操作,假设您的max()方法是在名为的类中定义的Example:
Date result = Example.<Date>max().apply(dates);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |