[FIXED] Java – Multi-Thread

Ausgabe

Ich habe diese Frage in einem Interview bekommen, kann jemand sie klären..

**/**
 * Assuming a threaded environment, and without knowing anything else,
 * what is the potential problem with myMethod()?
 * Fix it in the simplest way.
 */
*/
public class ClumsyTest {
    private static final String FUBAR = "fubar";

    public boolean myMethod(final MyObject bar) {
        if (bar.getFoo() != null) {
            return bar.getFoo().equals(FUBAR);
        } else {
            return false;
        }
    }

    public interface MyObject {
        String getFoo();
        void setFoo(String o);
    }
}**

in ‘myMethod’ wurde bar.getFoo() zweimal verifiziert. In einer Multi-Thread-Umgebung ist es sehr gut möglich, dass sich der Wert ändert. Wir müssen es also nur einmal verifizieren, und wenn wir wie folgt schreiben,

 **if (bar.getFoo().equals(FUBAR)) {
        return true;
    } else {
        return false;
    }**

Es wird eine Nullzeiger-Ausnahme ausgelöst, wenn bar.getFoo() null ist.

Wie können wir diese Methode so reparieren, dass sie nur einmal überprüft wird und eine Nullzeiger-Ausnahme vermieden wird

Lösung

Es ist eigentlich ganz einfach.

Anstatt bar.getFoo().equals(FUBAR)welche Risiken einzugehen NullPointerException, müssen Sie es andersherum prüfen als FUBAR.equals(bar.getFoo()). Und das ist alles, was dazu gehört.

Also einfach

    public boolean myMethod(final MyObject bar) {
        
        return FUBAR.equals(bar.getFoo());
        
    }


Beantwortet von –
Arun123


Antwort geprüft von –
Terry (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like