code: @SafeVarargs
      public static <T> Constructor<T> getDeclaredConstructor(final Class<T> cls, final Class<?>... parameterTypes) {
          Map<Class<?>[], Constructor<?>> constructorPool = classDeclaredConstructorPool.get(cls);
          Constructor<T> constructor = null;
  
          if (constructorPool != null) {
              constructor = (Constructor<T>) constructorPool.get(parameterTypes);
          }
  
          if (constructor == null) {
              try {
                  constructor = cls.getDeclaredConstructor(parameterTypes);
  
                  // SHOULD NOT set it true here.
                  // constructor.setAccessible(true);
              } catch (NoSuchMethodException e) {
                  // ignore.
              }
  
              if (constructor != null) {
                  if (constructorPool == null) {
                      constructorPool = new ArrayHashMap<>(ConcurrentHashMap.class);
                      classDeclaredConstructorPool.put(cls, constructorPool);
                  }
  
                  constructorPool.put(parameterTypes.clone(), constructor);
              }
          }
  
          return constructor;
      }
docs: Returns the constructor declared in the specified {@code cls} with the specified {@code parameterTypes}.
  
  @param cls
  @param parameterTypes
  @return {@code null} if no constructor is found