Ich (fälschlicherweise) schrieb den folgenden Code in einem Android-Projekt.Android Studio 2 vergleicht Objekt und boolesche Kompilierung erfolgreich, wenn es nicht sollte?
for (Map<String, Object> occurrence : occurrences) {
if (occurrence.get("cancelled") == true) {
// don't display cancelled events
continue;
}
...
Nun, wie ich es verstehe, was passiert sein sollte gibt es einen Compiler-Fehler auf die Wirkung von error: incomparable types: Object and boolean
, aber das ist nicht das, was passiert ist. Es kompilierte erfolgreich und verhielt sich so, wie ich es erwartet hatte. (Es ist wahr, dass der Wert, der hier abgerufen wird, immer eine Box sein wird
Ich hätte das nie bemerkt, aber einige Zeit nachdem ich den Code eingereicht hatte, versuchte ein Kollaborateur an seinem System zu versuchen kompilieren und einen Kompilierungsfehler bekommen.
Danach habe ich überprüft, um sicherzustellen, aber mein Code ist definitiv mit dem ==
-Operator, und es kompiliert immer noch fein, auch nach der Reinigung und Wiederaufbau.
Was geht hier vor? Gibt es eine Einstellung, die Android Studio anweist, dies zu beschönigen? Erlauben oder verbieten verschiedene Versionen der Java Toolchain diese Syntax? Ich habe dieses spezielle Beispiel, indem ich nur den Vergleich durch einen Anruf an .equals
ersetze, aber wir müssen in der Zukunft sicher sein, dass, wenn wir schreiben/kompilieren/Code prüfen, es nicht zufällig überhaupt nicht auf dem anderen Typ funktionieren wird Maschine!
Welche OS, IDE, Compiler-Version usw. wurden Sie beide laufen? – shmosel
Hier ist eine verwandte Frage und Antwort, die dazu beitragen könnte, es zu erklären. http://stackoverflow.com/questions/16770403/equality-comparison-of-boolean-and-object-allowed. –
@GeorgeMulligan Gut finden; Ich weiß nicht, warum meine Suche das nicht gesehen hat. Es sieht so aus, als hätte diese andere Frage die nötigen Hinweise, um das zu verfolgen, aber die Frage ist anders genug, um wahrscheinlich kein exaktes Duplikat zu sein (Eclipse vs. Android Studio), und auch die angenommene Antwort ist ziemlich vage mit der Verbindung anscheinend verrottet. Wenn Sie die Details zum Ändern dieser Einstellung in Android Studio aufschreiben möchten, akzeptiere ich die Antwort, sonst werde ich wahrscheinlich dieses Wochenende selbst dazukommen. – GrandOpener