When finalizeOperation is running (in production in a larger application):
public interface OperationFinalizerHook {
void onOperationFinalize(Operation operation, Object context);
}
private final List<OperationFinalizerHook> operationFinalizeHooks = new ArrayList<>();
...
public void finalizeOperation(Object context) {
final Operation operation = getOperation();
operationFinalizeHooks.forEach(hook -> hook.onOperationFinalize(operation, context));
}
following call tree/stacktrace is built:
11 at com.company.SomeClass.lambda$finalizeOperation$0 (SomeClass.java:51)
12 at com.company.SomeClass$$Lambda$135/2085968933.accept (Unknown source)
13 at java.util.ArrayList.forEach (ArrayList.java:1249)
14 at com.company.SomeClass.finalizeOperation (SomeClass.java:51)
I'm interested in line 12 - where does this name come from? Why are there random numbers where I would expect the name of a class?
Edit: Here's the code from blog post mentioned by Niklas P:
public class Test {
public static void main(String... args) {
List<String> names = Arrays.asList("adam", "");
Stream lengths = names.stream().map(name -> check(name));
lengths.count();
}
public static int check(String s) {
if (s.equals(""))
throw new IllegalArgumentException();
return s.length();
}
}
But the result does not contain this numeric name, the stacktrace is (jdk8u102):
Exception in thread "main" java.lang.IllegalArgumentException
at Test.check(Test.java:19)
at Test.lambda$main$0(Test.java:12)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at Test.main(Test.java:14)
On jdk8u25 the number is there:
Exception in thread "main" java.lang.IllegalArgumentException
at Test.check(Test.java:18)
at Test.lambda$main$0(Test.java:11)
at Test$$Lambda$1/1554547125.apply(Unknown Source)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:512)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.LongPipeline.reduce(LongPipeline.java:438)
at java.util.stream.LongPipeline.sum(LongPipeline.java:396)
at java.util.stream.ReferencePipeline.count(ReferencePipeline.java:526)
at Test.main(Test.java:13)