I just had a look at the the new Java 8 function package and wonder why there are interfaces like
DoubleFunction
IntFunction
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:
int
is boxed - meaning a larger memory footprint;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.