This issue is related to the fact that primitive types in Java are not unified to be substitutable for Object
, and with generic type erasure.
Using Function<T, Integer>
instead of IntFunction<T>
when the last one suffices has 2 disadvantages:
- Every returned
int
is boxed - meaning a larger memory footprint;
- Every returned
Integer
gets an automatic runtime check (which can be optimized away, but yeah...);
Note that these kinds of issues with the collection framework in Java have led people to write a whole library, named Trove, that eschews the generic interfaces in favor of specialized collection types for every primitive type.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…