Как переписать код Java без использования меток? - PullRequest
1 голос
/ 21 октября 2011
categoryCheck: {
        for (String allowedCategory : allowedCategories) {
            if (evt.getLoggerName().startsWith(allowedCategory)) {
                break categoryCheck;
            }
        }
        return false;
    }

Есть ли идеи, как переписать этот код без использования меток и без значительного его увеличения?

Ответы [ 4 ]

6 голосов
/ 21 октября 2011

Я бы, вероятно, поместил его в собственный метод:

// I've guessed at the types...
public boolean isCategoryAllowed(Event evt, Iterable<String> allowedCategories) {
    for (String allowedCategory : allowedCategories) {
        if (evt.getLoggerName().startsWith(allowedCategory)) {
            return true;
        }
    }
    return false;
}

Затем измените код вызова, чтобы просто вызвать метод:

if (!isCategoryAllowed(evt, allowedCategories)) {
    return false;
}
1 голос
/ 21 октября 2011

Вы можете использовать флаг.

boolean found = false;
for (String allowedCategory : allowedCategories) {
    if (evt.getLoggerName().startsWith(allowedCategory)) {
        found = true;
        break;
    }
}
if(!found) 
    return false;
1 голос
/ 21 октября 2011
boolean matched = false;

for (String allowedCategory : allowedCategories) {
    if (evt.getLoggerName().startsWith(allowedCategory)) {
        matched = true;
        break;
    }
}

if (!matched)
    return false;

// else continue with the rest of the code
1 голос
/ 21 октября 2011

Вот прямой эквивалент с использованием логического флага:

    boolean found = false;
    for (String allowedCategory : allowedCategories) {
        if (evt.getLoggerName().startsWith(allowedCategory)) {
            found = true;
            break;
        }
    }
    if (!found) {
        return false;
    }
    // ...the rest of the method's code...
...