brad
brad

Reputation: 32355

java equivalent of ruby's ||= syntax

I'm brand new to java, coming from a ruby world. One thing I love about ruby is the very terse syntax such as ||=.

I realize of course that a compiled language is different, but I'm wondering if Java has anything similar.

In particular, what I do all the time in ruby is something like:

someVar ||= SomeClass.new

I think this is incredibly terse, yet powerful, but thus far the only method I can think of to achieve the same thing is a very verbose:

if(someVar == null){
  someVar = new SomeClass()
}

Just trying to improve my Java-fu and syntax is certainly one area that I'm no pro.

Upvotes: 4

Views: 584

Answers (4)

irobeth
irobeth

Reputation: 1

This looks like you could add a method to SomeClass similar to

public static someClass enforce(someClass x)  {
 someClass r = x.clone();
 if(r == null){
  r = new SomeClass();
 }

 return r;
}

And call it like

someVar = SomeClass.enforce(someVar);

Upvotes: 0

BalusC
BalusC

Reputation: 1109865

No, there's not. But to replace

if(someVar == null){
  someVar = new SomeClass()
}

something similar is scheduled for Java 7 as Elvis Operator:

somevar = somevar ?: new SomeClass();

As of now, your best bet is the Ternary operator:

somevar = (somevar != null) ? somevar : new SomeClass();

Upvotes: 10

davidtbernal
davidtbernal

Reputation: 13694

I think the best you could do is the ternary operator:

someVar = (someVar == null) ? new SomeClass() : someVar;

Upvotes: 5

Matt
Matt

Reputation: 44078

There is no equivalent in Java. Part of the reason for this is that null is not considered false.

So, even if there was a logical OR-assignment keyword, you have to remember that:

Object x = null;
if (!x) { // this doesnt work, null is not a boolean

Upvotes: 1

Related Questions