Оба примера должны работать отлично. В «дженериках» можно использовать интерфейсы, абстрактные или конкретные типы классов. Я часто использую интерфейс Список в Картах, и у меня никогда не было проблем.
Вы говорите, что вам нужно только изменить тип myMap
и конструктор, чтобы ваши тесты прошли? Какие типы объектов вы используете в качестве ключей на карте, AClass
или что-то еще?
Внимательно посмотрите на ваши ошибки во время выполнения или предоставьте нам некоторые детали (только исключения без трассировки стека).
Что касается другой проблемы, как уже ответил Уешо, реализуйте либо хэш-код, либо равно (или для тестирования) ни один из них в классе, который вы действительно используете для ключей на карте.
EDIT
Зная из комментария, что хэш-код и равнозначны реализованы: есть одна возможная ловушка - если вы измените UUID после , объект уже был добавлен на карту (как ключ), тогда вы можете не сможет найти ваши значения после этого (хотя повторение на карте должно заставить его работать снова).
РЕДАКТИРОВАТЬ 2
Если вы получаете NPE непосредственно на myMap.get(AClass key)
, тогда либо myMap
- это null
, либо ключ (но это все еще не решает другую загадку ...)
РЕДАКТИРОВАТЬ 3
Только что проверил реализацию хеш-кода и равно на UUID, и это нормально. Вычисление ограничено только 128-битным UUID. Таким образом, если вы создаете два объекта UUID для одного и того же значения UUID и проверяете на равенство, тогда два объекта UUID не совпадают, а равны. Это хорошо. Если у вас есть метод получения UUID в AClass, то вы экспериментируете с картой типа HashMap<UUID, Values> myMap
и проверяете, работает ли она по-прежнему (может быть, случайно, изменение кода показывает настоящую ошибку;))