code: private static void putTypes(Class<?> cls, Class<?> expectedCls, Class<?> commonBaseCls, Type[] types) {
          poll();
          genericInterfacesCache.put(new ClassesKey(referenceQueue, cls, expectedCls, commonBaseCls), types);
      }
docs: Add a new expected class and Type[] to the Map of Maps. If there is only one expected class
  for a given class, then we will use a Collections.singletonMap(). Otherwise we will convert to a
  ConcurrentHashMap. This reduces overhead when there is only one expected Class.
  
  @param cls
  @param expectedCls
  @param types