Коллеги, не совсем понял момента одного - зачем нам существование ссылки именно на key? key же является частью объекта.
Горбачев Александр
38 уровень
Ссылка на key
Обсуждается
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Grock
4 апреля 2023, 09:45
Ответ, полагаю, устарел, но для тех, кому м.б. интересно напишу следующее:
У нас есть класс SomeKey, который имеет поле String name.
Также у нас есть класс SomeValue, который имеет поле SomeKey myKey.
Т.о. классы SomeValue различаются только лишь полями SomeKey myKey, т.е. различаются исключительно по ключам SomeKey myKey, которые являются их полями.
В классе Solution прежде чем создать объект класса SomeValue мы создаем объекты класса SomeKey:
Т.о. прежде чем стать частью объекта SomeValue, объекты SomeKey создаются отдельно.
Однако впоследствии объект SomeValue создается в одном экземпляре с одним ключом:
Далее в методе public V getByKey(K key, Class<V> clazz) класса Cache<K, V> осуществляется проверка, есть ли в поле Map<K, V> cache класса класса Cache<K, V> объект SomeValue с ключом SomeKey. Для этого мы передаем в этот метод отдельно ссылку на ранее созданный в класса Solution ключ SomeKey, а не объект SomeKey, взятый из объекта SomeValue:
Поскольку объект с таким ключом уже есть в Map<K, V> cache, то к нам просто возвращается значение Map<K, V> cache, соответствующее переданному в метод ключу, т.е. возвращается объект SomeValue, внутри которого "вшит" аналогичный ключ SomeKey.
0
Grock
4 апреля 2023, 09:49
Т.о. программа заточена на то, чтобы создавать объекты SomeValue по ключам, а если такие объекты с аналогичным ключом уже созданы (присутствуют в Map<K, V> cache), то мы просто возвращаем соответствующие объект, находя его по ключу.
Т.е. мы используем в работе (передаем в качестве аргумента в метод cache.getByKey()) объекты SomeKey как отдельно созданные объекты, а не как часть объекта SomeValue.
А вот почему это реализовано именно так - на этот вопрос могут ответить только разработчики задачи. Возможно, чтобы показать нам механизм рефлексии: работы с классами, их полями и методами в отсутствии информации о них (или невозможности менять их код).
0