[personal profile] sassa_nf
А как насчёт добавить классам public boolean equalsLifted(A obj).

Мотивирующий пример:

WeakHashMap умеет хранить пары ключ-значение со слабой ссылкой на ключ. Так, если на ключ никто не ссылается сильно, пара ключ-значение из мапы выбрасывается. Решается с помощью заворачивания ключа в WeakReference, и приходится реализовать специальный способ поиска, поскольку в WeakHashMap.get передаём ключ, а не WeakReference, и в процессе поиска сравниваем с ключом ссылку из WeakReference, а не сам WeakReference. Но зато если вам нужен WeakList или SoftHashMap, нужно всё реализовывать заново.

Вместо реализации заново, нужно реализовать equalsLifted, тогда если класс является функтором, то поиск ключа в мапе (или значения в списке) - это тот же equals, но lifted функтором.

Было:
public V get(K k) {
  int h = k.hashCode();
  for(Entry e: table[h % table.length]) {
    WeakReference w = e.getKey();
    K p = w.get();
    if (p != null && p.equals(k)) return (V)e.getValue();
  }
  return null;
}


Стало бы:
public V get(K k) {
  int h = k.hashCode();
  for(Entry e: table[h % table.length]) {
    Object p = e.getKey();
    if (p.equalsLifted(k)) return (V)e.getValue();
  }
  return null;
}

Object.equalsLifted() = equals();
WeakReference.equalsLifted(k) = {
  K p = get();
  return p != null && p.equals(k);
}


Глупости, конечно, такие мелочи не спасут отца русской демократии, но что-то демонстрирует.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

sassa_nf

February 2026

S M T W T F S
1234567
891011121314
15161718192021
222324252627 28

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 24th, 2026 04:06 am
Powered by Dreamwidth Studios