@Override
    public int hashCode() {
      // This equals Arrays.hashCode(getLowerBounds()) ^ Arrays.hashCode(getUpperBounds()).
      return (lowerBound != null ? 31 + lowerBound.hashCode() : 1) ^ (31 + upperBound.hashCode());
    }
The WildcardType interface supports multiple upper bounds and multiple lower bounds. We only
support what the Java 6 language needs - at most one bound. If a lower bound is set, the upper
bound must be Object.class.
core/src/main/java/feign/Types.java