Java泛型:类似max()的函数

Java泛型:类似max()的函数,java,generics,Java,Generics,功能抽象: public abstract class Function<X, Y> { abstract Y apply(X x); } 和用法(应该是什么样子) 但是我得到了这个错误,不明白为什么它需要对象 incompatible types; inferred type argument(s) java.lang.Object do not conform to bounds of type variable(s) V found

功能抽象:

  public abstract class Function<X, Y> {     
      abstract Y apply(X x);      
  }
和用法(应该是什么样子)

但是我得到了这个错误,不明白为什么它需要
对象

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
不兼容类型;推断的类型参数java.lang.Object不符合类型变量V的边界
找到:project.Function
必需:java.lang.Object
我读过大量类似的QA,但不知道如何解决这个问题。
谢谢。

Java的类型推断非常有限。如果你这样写:

Date result = max().apply(datesList);
它不够复杂,无法推断
max()
方法
V
的类型参数,因此需要
java.lang.Object
。你可以试试这个:

Function<List<Date>, Date> fn = max();
Date result = fn.apply(dates);

仅供参考,您的
函数
类型看起来是使用的好地方。我同意Taymon的观点,我会将其作为接口而不是抽象类。请注意,已经有了一个完全相同的
函数
接口。@Taymon感谢您的建议,但实际上我在这个类中有更多的方法。例如:public Function then(Function second){…}Google Guava还有一个类
Functions
,其中包含用于组合函数的实用方法,等等。我将尝试这个。谢谢我现在明白这不是我的错,而是Java类型推断的局限性。谢谢
Date result = max().apply(datesList);
Function<List<Date>, Date> fn = max();
Date result = fn.apply(dates);
Date result = Example.<Date>max().apply(dates);