@Override
    public boolean equals(final Object o) {
        boolean res = this == o;
        if (!res && o instanceof WildcardType) {
            final WildcardType that = (WildcardType) o;
            final Type[] thatLowerBounds = that.getLowerBounds();
            final Type[] thatUpperBounds = that.getUpperBounds();

            res = Arrays.equals(lowerBounds, thatLowerBounds) && Arrays.equals(upperBounds, thatUpperBounds);
        }
        return res;
    }