Почему запросы «не равны» в FireStore не поддерживаются / трудно реализуемы?

Анд, я думаю, вы приближаетесь к этому - каламбур НЕ предназначен - с ненужной степенью абстракции. Я думаю, что этот (ИМХО) ненужный уровень абстракции является тем, что вызывает здесь «проблему». Возможно, вы приближаетесь к этому с математического теоретического подхода, когда многие из нас приближаются к этому с подхода «программист, пытающийся решить проблемы». Я считаю, что это различие в подходах вызывает разногласия.

Когда программисты смотрят на практичность и как на самом деле реализуют что-то, есть несколько раз, когда вам нужен какой-то полностью произвольный объект фактический пример которого совершенно не имеет значения. Он просто не может быть нулевым. Пример, который я дал в комментарии к другому сообщению, - это реализация *Set (* == Hash или Concurrent или тип выбора), который обычно выполняется с использованием поддержки *Map и использования Map в качестве набора. Вы часто не можете использовать null как значение Map, поэтому обычно делается попытка использовать статический экземпляр Object как значение, которое будет игнорироваться и никогда не будет использоваться. Однако необходим некоторый ненулевой заполнитель.

Еще одно распространенное использование с ключевым словом synchronized, где требуется некоторое Object для синхронизации, и вы хотите обеспечить что ваш синхронизированный элемент полностью закрыт, чтобы избежать тупиковой ситуации, когда разные классы непреднамеренно синхронизируются с одной и той же блокировкой. Очень распространенная идиома заключается в том, чтобы выделить private final Object для использования в классе как блокировку. Справедливости ради следует отметить, что по сравнению с Java 5 и java.util.concurrent.locks.Lock и связанными дополнениями эта идиома заметно менее применима.

Исторически сложилось так, что на Java было очень полезно иметь Object. Вы могли бы сказать, что с небольшими изменениями в дизайне или с небольшими изменениями API это больше не понадобится. Вы, вероятно, правы в этом.

И да, API мог бы предоставить класс Placeholder, который расширяет Object без добавления чего-либо вообще, для использования в качестве заполнителя для целей, описанных выше , Но - если вы расширяете Object, но ничего не добавляете, каково значение в классе, кроме того, что разрешить Object быть абстрактным? Математически, теоретически, возможно, можно было бы найти значение, но прагматически, какое значение он мог бы добавить для этого?

В программировании есть моменты, когда вам нужен объект, некоторый объект , любой конкретный объект , который не является нулевым, что вы можете сравнить с помощью == и / или .equals(), но вам просто не нужна какая-либо другая функция для этого объекта. Он существует только для того, чтобы служить уникальным идентификатором и в противном случае абсолютно ничего не делает. Object удовлетворяет эту роль отлично и (IMHO) очень чисто.

Я бы предположил, что это является частью причины, по которой Object не был объявлен абстрактным: для него это просто не полезно.

0
задан Nth.gol 18 January 2019 в 15:20
поделиться