dieser Code Gegeben:IntelliJ sagt, sollte wohl nicht als Parameter übergeben werden x
private static class Building {
private final int left;
private final int right;
private final int height;
private Building(int left, int right, int height) {
this.left = left;
this.right = right;
this.height = height;
}
}
private PriorityQueue<Building> createMaxHeapByHeight() {
return new PriorityQueue<>(new Comparator<Building>() {
@Override
public int compare(Building o1, Building o2) {
return -Integer.compare(o1.height, o2.height);
}
});
}
IntelliJ eine Warnung für den Vergleich Linie zeigt oben und sagte:
return -Integer.compare(o1.height, o2.height); // ^^^^^^^^^ // 'height' should probably not be passed as parameter 'x'
Die Warnung kann mit einem Kommentar auf die Aussage unterdrückt werden:
//noinspection SuspiciousNameCombination
Ok, aber was ist hier so verdächtig?
Auch, wenn ich ändere, um das im Vergleich Feld left
oder right
(nur um zu spielen und zu untersuchen), die Warnung Verschiebungen auf den zweiten Parameter, zum Beispiel:
return -Integer.compare(o1.right, o2.right); // ^^^^^^^^ // 'right' should probably not be passed as parameter 'y'
Was ist hier noch so verdächtig? Warum beschwert es sich über den ersten Parameter für das Feld height
und über den zweiten Parameter für die Felder left
und right
? Was ist die Logik hier?
Ich bin nicht sicher, warum genau, obwohl Sie versuchen können, durch diese - http://breandan.net/2014/04/20/intellij-inspections/ Im Grunde ist es besorgt, dass Sie einen Fehler/Tippfehler machen in Ihrer arg Bestellung/Wahl. Einfach zu vermeiden o1.height - o2.height (schneller auch!) – pvg
@pvg - Dieser Ansatz wird für große Werte überlaufen ... –
@OliverCharlesworth sicher, aber nichts hält Sie davon ab, die Reichweite bei der Konstruktion zu erzwingen. Es ist nicht so, dass negative Höhe auch Sinn macht. – pvg