Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Best practice with respect to NPE and multiple expressions on single line

I'm wondering if it is an accepted practice or not to avoid multiple calls on the same line with respect to possible NPEs, and if so in what circumstances. For example:

anObj.doThatWith(myObj.getThis());

vs

Object o = myObj.getThis();
anObj.doThatWith(o);

The latter is more verbose, but if there is an NPE, you immediately know what is null. However, it also requires creating a name for the variable and more import statements.

So my questions around this are:

  • Is this problem something worth designing around? Is it better to go for the first or second possibility?
  • Is the creation of a variable name something that would have an effect performance-wise?
  • Is there a proposal to change the exception message to be able to determine what object is null in future versions of Java ?
like image 254
JRL Avatar asked Nov 26 '25 21:11

JRL


1 Answers

Is this problem something worth designing around? Is it better to go for the first or second possibility?

IMO, no. Go for the version of the code that is most readable.

If you get an NPE that you cannot diagnose then modify the code as required. Alternatively, run it using the debugger and use breakpoints and single stepping to find out where the null pointer is coming from.

Is the creation of a variable name something that would have an effect performance-wise?

Adding an extra variable may increase the stack frame size, or may extend the time that some objects remain reachable. But both effects are unlikely to be significant.

Is there a proposal to change the exception message to be able to determine what object is null in future versions of Java ?

Not that I am aware of. Implementing such a feature would probably have significant performance downsides.

like image 82
Stephen C Avatar answered Nov 28 '25 10:11

Stephen C



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!