Chức năng trừu tượng:Java Generics: chức năng giống như max()
public abstract class Function<X, Y> {
abstract Y apply(X x);
}
max
phương pháp thực hiện
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);
}
};
}
Và sử dụng (làm thế nào nó sẽ giống như thế)
Date result = max().apply(datesList);
Nhưng tôi gặp lỗi này và không hiểu tại sao yêu cầu phải có số 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
Tôi đã đọc số lượng lớn QA tương tự nhưng không hiểu cách sửa lỗi này. Cảm ơn.
FYI , kiểu 'Hàm' của bạn trông giống như một nơi tốt để sử dụng [giao diện] (http://docs.oracle.com/javase/tutorial/java/concepts/interface.html). – Taymon
Tôi đồng ý với Taymon, tôi sẽ làm cho giao diện đó thay vì một lớp trừu tượng. Lưu ý rằng [Google Guava] (http://code.google.com/p/guava-libraries/) đã có giao diện 'Function' giống hệt nhau. – Jesper
@Taymon Cảm ơn bạn đã đề xuất, nhưng thực ra tôi có nhiều phương pháp hơn trong lớp học này. Ví dụ: công khai Chức năng rồi (Chức năng giây) {...} –