Поток Java использует 'return;' в бегах () - PullRequest
0 голосов
/ 09 мая 2018

Я хочу использовать 'return;' завершить поток из выполнения, если условие истинно. Что плохого может случиться?

Это просто пример для лучшего понимания. В моем коде десятки проверяют это условие и для меня выглядят очень неупорядоченными (если в другом, если ...).

Я все еще хочу выполнить блок finally.

public class Method implements Runnable{

@Override
public void run() {

    try {

        if(condition) { return; }

        System.out.println("b");

    }finally {

        System.out.println("a");

    }

}

или лучше если-еще?

public class Method implements Runnable{

@Override
public void run() {

    try {

        if(!condition) { 

            System.out.prinln("b");

        }else{ //nothing }

    }finally {

        System.out.println("a");

    }

}

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Реальный ответ здесь таков: если вы беспокоитесь о читабельности , тогда ваша проблема не в возврате по сравнению с if-else .

Тогда ваша проблема здесь:

В моем коде десятки проверяют это условие

Скорее всего, это означает, что ваш поток делает путь ко многим вещам. Ведущий к загроможденному, нечитаемому коду.

Конечно, на первый взгляд, это означает, что вы определенно хотите

if (whatever) {
  return;
}

if (somethingElse) {
  return;
}

вместо добавления слоев отступа с if / else if / else ...

Но, как уже было сказано: реальный ответ здесь - сделать шаг назад, получить полную картину и найти пути решения этой "большой проблемы с изображением" наиболее читабельным способом. Скорее всего, ваш нынешний подход не приведет вас туда. Даже не близко. Вместо этого вы должны вместо этого изучить нарезку кода во многих меньших методах (с хорошими именами) и упорядочить их осмысленным образом.

0 голосов
/ 09 мая 2018

Что плохого может случиться?

Ничего плохого не случится, если вы return; в методе run().

Две версии вашего run() метода функционально эквивалентны; то есть они делают то же самое.

И класс finally всегда будет 1 выполняться в обоих случаях. Как если бы это был не метод run().

Единственные различия между двумя версиями - стилистические. Используйте версию, которую вы считаете наиболее читаемой в вашем реальном коде . (Я не думаю, что кто-то может посоветовать вам, основываясь на этом очень искусственном примере.)


1 - ... если кто-то / что-то не убивает процесс JVM, вынимает штепсель питания и так далее.

...