我試圖了解如何使用Function<T,R>在 java 庫中定義的介面。為什么傳遞 to 的實體DoubleIt可以map作業,但傳遞建構式參考會得到下面的編譯器錯誤,有沒有辦法做到這一點:

import java.util.Arrays;
import java.util.function.Function;
import java.util.stream.Stream;
public class C {
public static void main(String[] args) {
final Stream<Integer> stream = Arrays.stream(new Integer[]{2, Integer.MAX_VALUE});
DoubleIt<Integer, Long> doubleIt = new DoubleIt<>();
stream.map(doubleIt) // OK instance
.forEach(System.out::println);
stream.map(DoubleIt<Integer, Long>::new) // error constructor reference
.forEach(System.out::println);
}
}
class DoubleIt<T extends Integer, R extends Long> implements Function<T, R> {
@Override
public R apply(T t) {
@SuppressWarnings("unchecked")
final R r = (R) Long.valueOf(t.intValue() * 2L);
return r;
}
}
uj5u.com熱心網友回復:
第一個傳遞一個DoubleIt實體,另一個傳遞一個構造DoubleIt實體的方法,兩者的簽名非常不同。為什么您希望它們可以互換?
第一個可以消耗 anInteger并回傳 a Long,第二個可以不消耗任何內容并回傳 a DoubleIt。他們做的事情非常不同,因此你不能用一個來代替另一個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/416605.html
標籤:
