Dato questo codice:IntelliJ dice, probabilmente non dovrebbe essere passato come parametro 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 mostra un messaggio di avviso per la linea di confronto di cui sopra, dicendo:
return -Integer.compare(o1.height, o2.height); // ^^^^^^^^^ // 'height' should probably not be passed as parameter 'x'
L'avvertimento può essere soppresso con un commento sulla dichiarazione:
//noinspection SuspiciousNameCombination
Ok, ma cosa c'è di così sospetto qui?
Inoltre, se cambio il campo rispetto al left
o right
(solo per il gusto di giocare e indagando), i turni di avvertimento per il secondo parametro, ad esempio:
return -Integer.compare(o1.right, o2.right); // ^^^^^^^^ // 'right' should probably not be passed as parameter 'y'
Di nuovo, cosa c'è di così sospetto qui? Perché si lamenta del primo parametro per il campo height
e del secondo parametro per i campi left
e right
? Qual è la logica qui?
Non sono sicuro del perché esattamente anche se puoi provare a guadare questo - http://breandan.net/2014/04/20/intellij-inspections/ Fondamentalmente, è preoccupato che tu stia commettendo un errore/errore di battitura nel tuo ordine/scelta arg. Facilmente evitato semplicemente restituendo o1.height - o2.height (anche più veloce!) – pvg
@pvg - Questo approccio sarà troppo pieno per grandi valori ... –
@OliverCharlesworth certo, ma non c'è nulla che ti impedisca di far rispettare l'intervallo di costruzione. Neanche l'altezza negativa ha senso. – pvg