So my colleague was decompiling some Java code. We're using IntelliJ and then it happens automatically if you happen to select a Class file or something referencing a class file for which there are no sources attached.
And for the life of us, we couldn't understand why that code seemed to work.
Here's the decompiled code snippet.
protected Block createItem(String title, ItemProperties properties) { return this.createItem(title, properties); }
It looked like it was going in circles, as the method was simply calling itself. This is bound to create a StackOverflowError when enough recursion happens.
However, no such problem occurred.
When looking at the source, however, we found it was not similar to the decompiled code:
protected Block createItem(String title, ItemProperties properties) { return createItem(title, properties, new SubItem[0]); }
What turned out to be the issue, an empty array as the varargs at the end of a method is simply removed in the decompiled class version.
Hence our confusion.
It took us several minutes to find this out.
References
- Baeldung - Varargs
- https://www.baeldung.com/java-varargs
No comments:
Post a Comment