Java-эквивалент синтаксиса рубина || - PullRequest
4 голосов
/ 29 марта 2010

Я новичок в Java, родом из мира рубинов. Одна вещь, которую я люблю в ruby ​​- это очень краткий синтаксис, такой как || =.

Конечно, я понимаю, что скомпилированный язык отличается, но мне интересно, есть ли в Java что-то похожее.

В частности, то, что я все время делаю в ruby, выглядит примерно так:

someVar ||= SomeClass.new

Я думаю, что это невероятно кратко, но мощно, но пока единственный метод, который я могу придумать для достижения того же, - очень многословный:

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

Просто попытка улучшить мой Java-фу и синтаксис - это, безусловно, одна из областей, в которой я не профессионал.

Ответы [ 4 ]

10 голосов
/ 29 марта 2010

Нет, нет. Но заменить

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

нечто подобное запланировано для Java 7 как Оператор Элвиса :

somevar = somevar ?: new SomeClass();

На данный момент, ваша лучшая ставка - Тернарный оператор :

somevar = (somevar != null) ? somevar : new SomeClass();
5 голосов
/ 29 марта 2010

Я думаю, что лучшее, что вы могли бы сделать, это троичный оператор:

someVar = (someVar == null) ? new SomeClass() : someVar;
1 голос
/ 29 марта 2010

В Java нет эквивалента. Частично это объясняется тем, что null не считается false.

Таким образом, даже если было ключевое слово логического ИЛИ-назначения, вы должны помнить, что:

Object x = null;
if (!x) { // this doesnt work, null is not a boolean
0 голосов
/ 29 марта 2010

Похоже, вы можете добавить метод к SomeClass, аналогичный

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

 return r;
}

И назовите это как

someVar = SomeClass.enforce(someVar);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...