code: private static boolean isLowerBoundsCompatible(final WildcardType one, final WildcardType two) {
          boolean res = true;
          final Type[] oneLower = one.getLowerBounds();
          final Type[] twoLower = two.getLowerBounds();
          if (oneLower.length > 0 && twoLower.length > 0) {
              res = isCompatible(GenericsUtils.resolveClassIgnoringVariables(oneLower[0]),
                      GenericsUtils.resolveClassIgnoringVariables(twoLower[0]));
          }
          return res;
      }
docs: When both wildcards are lower bounded (? super) then bounds must be compatible.
  For example, ? super Integer and ? super BigInteger are not compatible (Integer, BigInteger)
  and ? super Comparable and ? super Number are compatible (Number assignable to Comparable).
  <p>
  Of course, even incompatible lower bounds share some commons (at least object) but these types
  could not be casted to one another and so no compatibility.
  
  @param one first wildcard type
  @param two second wildcard type
  @return true if onw of wildcards is not lower bounded or lower bounds are compatible, false when
  lower bounds are incompatible