If you look here
, you will notice that our friends at Microsoft have developed a high level decompiler for
.Net IL. Basically, it decompiles the IL into an abstract, non binary, human readable form.
The tool for manipulating this new IL (ILX) is F#, an ML family functional language. This is because ILX fits more naturally with a functional language than it would with, say, C# or C++.
C# and the like can still be used, but if you look at the ILX and compare it to F#, the reason for using a functionl language should be obvious.
I don't know if you can do this with Java or not, but if there were such a decompliler, the output would be much easier to work with as in ML than with Java itself.