public static WildcardType wildcardExtends(Type upperBound) {
    """
	Creates a wildcard type with an upper bound.
	<p>
	For example <tt>wildcardExtends(String.class)</tt> returns the type <tt>? extends String</tt>.
	
	@param upperBound Upper bound of the wildcard
	@return A wildcard type
    """
		if (upperBound == null) {
			throw new NullPointerException();
		}
		return new WildcardTypeImpl(new Type[]{upperBound}, new Type[]{});
	}
public static WildcardType wildcardExtends(Type upperBound) {
		if (upperBound == null) {
			throw new NullPointerException();
		}
		return new WildcardTypeImpl(new Type[]{upperBound}, new Type[]{});
	}
public static WildcardType wildcardExtends ( Type upperBound ) { if ( upperBound == null ) { throw new NullPointerException ( ) ; } return new WildcardTypeImpl ( new Type [ ] { upperBound } , new Type [ ] { } ) ; }
Creates a wildcard type with an upper bound.
<p>
For example <tt>wildcardExtends(String.class)</tt> returns the type <tt>? extends String</tt>.

@param upperBound Upper bound of the wildcard
@return A wildcard type
Creates a wildcard type with an upper bound . <p > For example <tt > wildcardExtends ( String . class ) < / tt > returns the type <tt > ? extends String< / tt > .