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)