Упростить Java, если заявление - PullRequest
2 голосов
/ 03 августа 2011

Можно ли упростить эту Java-конструкцию?Мне это кажется слишком многословным, я бы хотел, чтобы он был короче.

A - это постоянный объект, который будет нулевым, если к его контексту обращаются в первый раз.Чем A присваивается и предоставляется содержимое, и если это не удается, некоторое содержимое резервной копии передается A.

if (A == null) {
    A = staticGetMethod();
    if (A == null) A = new BackupAContent() { ... };
}

Ответы [ 5 ]

5 голосов
/ 03 августа 2011

Обновление: Или вы можете просто удалить вложение, так как оно будет вести себя так же.

if (A == null) {
    A = staticGetMethod();
}
if (A == null) {
    new BackupAContent() { ... };
}

Должно работать:

if (A == null && (A = staticGetMethod()) == null) {
    new BackupAContent() { ... };
}
3 голосов
/ 03 августа 2011

Поместите вашу строительную логику в фабричный метод

if (objA == null) {
    objA = getAInstance();

}

инкапсулирует код, предложенный Чарльзом, в метод реализации Factory_method_pattern

0 голосов
/ 03 августа 2011

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

if(A == null)
{
    if((A = staticGetMethod()) == null) A = new BackupAContent() { ... };
}
0 голосов
/ 03 августа 2011

Это код Чарльза Гудвина с небольшим изменением:

if (A == null && (A = staticGetMethod()) == null) {
new BackupAContent() { ... };
}

Я использовал AND вместо OR

0 голосов
/ 03 августа 2011

Вы можете использовать троичный оператор вместо if операторов:

a = a ? a : staticGetMethod();
a = a ? a : new BackupAContent();

При этом я буду придерживаться того, что у вас есть, если честно - за исключением того, что я бы добавилблок для второго условного выражения вместо того, чтобы помещать в него оператор.

...