1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.lang.reflect;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
217281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * A pattern type, such as the upper bounded wildcard {@code
227281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * ? extends Closeable} or the lower bounded wildcard {@code ? super String}.
23f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson *
247281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * <p>Although this interface permits an arbitrary number of upper and lower
257281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * bounds, all wildcard types of Java language programs are in one of two forms:
267281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * <ol>
277281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * <li><strong>No lower bound and one upper bound.</strong> Such types are
287281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson *     written like {@code ? extends java.lang.Number}. When the upper bound is
297281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson *     {@code java.lang.Object}, the {@code extends java.lang.Object} suffix is
307281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson *     optional: {@code Set<?>} is shorthand for {@code
317281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson *     Set<? extends java.lang.Object>}.
327281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * <li><strong>One lower bound and an upper bound of {@code
337281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson *     java.lang.Object}.</strong> Such types are written like {@code
347281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson *     ? super java.lang.String}.
357281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * </ol>
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic interface WildcardType extends Type {
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the array of types that represent the upper bounds of this type.
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The default upper bound is {@code Object}.
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return an array containing the upper bounds types
43f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws TypeNotPresentException
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if any of the bounds points to a missing type
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws MalformedParameterizedTypeException
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if any bound points to a type that cannot be instantiated for
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             some reason
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    Type[] getUpperBounds();
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the array of types that represent the lower bounds of this type.
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The default lower bound is {@code null}, in which case an empty array is
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * returned. Since only one lower bound is allowed, the returned array's
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * length will never exceed one.
57f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return an array containing the lower bounds types
59f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws TypeNotPresentException
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if any of the bounds points to a missing type
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws MalformedParameterizedTypeException
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if any of the bounds points to a type that cannot be
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             instantiated for some reason
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    Type[] getLowerBounds();
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
68