Hi Remi, On 22 Sep 2015, at 08:08, Remi Forax <fo...@univ-mlv.fr> wrote: > Hi Paul, > to summarize, there are a lot of codes that do bound checking in the JDK that > report different kind of exceptions. >
Yes, and I suspect it is a similar state of affairs for code outside of the JDK too. > A way to retrofit most of then is to use a lambda to let the user code to > choose its convention. > But because lambda creations are backed by invokedynamic, you can not retrofit > code that is used before the method handle mechanism is set up during the > bootstraping of the JDK. > We can retrofit, but we will not use lambda expressions or method refs in those cases. > There are several kinds of bound checking, and i see no gain to force them to > use the same function type. > Also, I have use a wildcard instead of a type variable given that it's an > unchecked exception for the compiler. > > For the simplest form of bound checking, 0 <= index < length, aka checkIndex, > because there is only one index to report, i propose: > public static void checkIndex(int index, int length, IntFunction<? extends > RuntimeException> exceptionCreator) > I disagree, we need BiFunction. I have eyeballed a sufficient number of use-cases that report index and length in the exception message. > For the form of that uses a size, 0 <= index < size <= length, aka > checkFromIndexSize, as you said, let's use a BiFunction<Integer, Integer, > ...>, > public static void checkRange(int index, int size, int length, > BiFunction<Integer, Integer, ? extends RuntimeException> exceptionCreator) > > For the form that uses an offset, 0 <= index <= index + offset < length, > public static void checkRangeWithOffset(int index, int offset, int length, > BiFunction<Integer, Integer, ? extends RuntimeException> exceptionCreator) > > Also, the documentation should be clear that if a lambda captures values from > the context, the performance will be worst than inlining the check by hand. > Yes, i can write some api note. FWIW for the sub-range checks it probably matters less as those are often followed by some bulk operation. Paul.