Задание сделал сам (в кой то веки), однако - чистейшего понимания, что происходит - нет.
public AnyObject put(Long key, AnyObject value) {
        try {  if (cacheMap.containsKey(key))  {
            AnyObject m = cacheMap.get(key).get();
            SoftReference<AnyObject> softReference = cacheMap.put(key, new SoftReference<>(value));
            softReference.clear();
            return m;
        }} catch (NullPointerException m) {
            SoftReference<AnyObject> softReference = cacheMap.put(key, new SoftReference<>(value));
            softReference.clear();
            return null;}
        return null;}
В мэине мы запихиваем в мапу private Map<Long, SoftReference<AnyObject>> cacheMap = new ConcurrentHashMap<>(); много объектов. Где ключ - это цифра, а значение софтовая ссылка на наш объект SoftReference<AnyObject> softReference = cacheMap.put(key, new SoftReference<>(value)); Зачем нам в данном случае нужен softReference ? Могли бы просто запихать в мапу и все. Или же это с целью демонстрации ? Поясните, пожалуйста.