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/**
21f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * This interface represents a parameterized type such as {@code
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 'Set<String>'}.
23f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson *
24f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic interface ParameterizedType extends Type {
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns an array of the actual type arguments for this type.
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * If this type models a non parameterized type nested within a
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * parameterized type, this method returns a zero length array. The generic
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * type of the following {@code field} declaration is an example for a
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * parameterized type without type arguments.
35f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <pre>
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * A&lt;String&gt;.B field;
38f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * class A&lt;T&gt; {
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *     class B {
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *     }
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * }</pre>
43f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
44f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the actual type arguments
46f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws TypeNotPresentException
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if one of the type arguments cannot be found
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws MalformedParameterizedTypeException
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if one of the type arguments cannot be instantiated for some
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             reason
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    Type[] getActualTypeArguments();
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the parent / owner type, if this type is an inner type, otherwise
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code null} is returned if this is a top-level type.
58f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the owner type or {@code null} if this is a top-level type
60f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws TypeNotPresentException
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if one of the type arguments cannot be found
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws MalformedParameterizedTypeException
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if the owner type cannot be instantiated for some reason
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    Type getOwnerType();
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the declaring type of this parameterized type.
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The raw type of {@code Set&lt;String&gt; field;} is {@code Set}.
72f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson     *
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the raw type of this parameterized type
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    Type getRawType();
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
77