Biorąc pod uwagę ten kod:IntelliJ mówi, nie powinna być przekazana jako parametr 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 pokazuje ostrzeżenie dla linii porównania wyżej, mówiąc:
return -Integer.compare(o1.height, o2.height); // ^^^^^^^^^ // 'height' should probably not be passed as parameter 'x'
ostrzeżenie może być wyłączony z komentarzem do oświadczenia:
//noinspection SuspiciousNameCombination
OK, ale co tu jest tak podejrzane?
Również, jeśli mogę zmienić pola w stosunku do left
lub right
(tylko dla dobra gra i badania), przesunięcia ostrzegawcze do drugiego parametru, na przykład:
return -Integer.compare(o1.right, o2.right); // ^^^^^^^^ // 'right' should probably not be passed as parameter 'y'
Znowu, co tu jest tak podejrzane? Dlaczego narzeka na pierwszy parametr dla pola height
i drugi parametr dla pól left
i right
? Jaka jest tutaj logika?
Nie jestem pewien, dlaczego dokładnie, choć możesz spróbować przebrnąć przez to - http://breandan.net/2014/04/20/intellij-inspections/ Zasadniczo martwi Cię popełnianie błędów/literówka w swoim zamówieniu/wyborze. Łatwo uniknąć poprzez powrót o1.height - o2.height (szybciej też!) – pvg
@pvg - To podejście będzie przepełnione dla dużych wartości ... –
@OliverCharlesworth z pewnością, ale nic nie powstrzyma cię przed egzekwowaniem zasięgu przy budowie. To nie jest tak, że ujemna wysokość ma sens. – pvg