Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing primitive types as out param in Java

I need to return/update a boolean while returning a list of stuff from a method. Java can't return tuples and I didn’t want to make a separate class for this, so figured I would pass the bool as an out param. That’s what our C++ client does, passes bool by reference. That would work for a normal class since java sort of has pass-by-ref for objects (see Is Java "pass-by-reference" or "pass-by-value"? for a good discussion of this). But the “Wrapper” classes like Boolean store their primitive value as immutable, so it can't be updated in this way.

Using a boolean array (with one entry) seems hokey but is perhaps the simplest thing that works. Alternatively, could return the boolean and pass the created list back as an out param rather than as the return [but then the java client deviates from the C++, and it's best if they keep mostly the same approach- FYI need this in C# too.]

like image 818
Cincinnati Joe Avatar asked Feb 08 '10 19:02

Cincinnati Joe


1 Answers

No, Java doesn't have pass-by-ref for objects; it has "pass reference by value" which isn't the same thing.

You definitely can't pass anything as an "out" parameter or by reference in Java - although you could in C#.

Could you encapsulate the "Boolean plus list" into another type? Are they actually related? Using a boolean array is definitely pretty ugly. You could write a MutableBoolean wrapper type - but again, that's pretty ugly. Normally I'd say that returning two things suggests the method should be split up, but when one of them is a Boolean it can be fairly reasonable - like int.TryParse etc from C#.

like image 116
Jon Skeet Avatar answered Oct 07 '22 13:10

Jon Skeet