Итак, я делаю полноэкранное приложение и сталкивался с чем-то странным.DisplayMode.equals (DisplayMode dm) Confusion
Метод DisplayMode.equals (DisplayMode dm) переопределен, но я не думаю, что он реализован совершенно правильно. Следующий печатает код ложной консоли:
public static void main(String[] args){
DisplayMode mode = new (1,2,16, DisplayMode.REFRESH_RATE_UNKNOWN);
System.out.println(mode.equals(new DisplayMode(1, 2, 16, 60)));
}
Если режимы отображения одинаково за исключение их частоту обновления, и один из них неизвестен, то я думаю, что они должны быть равны. Почему это не так, и может ли кто-нибудь предложить обходной путь для меня? Кроме того, почему онлайн-документы Java показывают, что есть две перегруженные версии метода .equals(), один с объектом DisplayMode и один с объектом Java.Lang.Object? https://docs.oracle.com/javase/7/docs/api/java/awt/DisplayMode.html
Почему существует .equals метод() переопределены для этого объекта, но не многие десятки других объектов в библиотеках Java? –
@AviCaspe Я не уверен в ответе. Это может быть связано с оценкой эффективности. Во время компиляции компилятор может указать, какой именно метод вызывать в этом случае; поэтому, если вы хотите сравнить два объекта DisplayMode, вы сохранили бы пару инструкций, вызвав тот, который принимает «DisplayMode» в качестве аргумента, вместо того, чтобы принимать «Object». Еще одна вещь, которую следует учитывать, заключается в том, что аннотации не существовали, когда этот класс был добавлен, поэтому вы не могли использовать '@ Override', который может что-то с ним делать. – Zymus