emul/mini/src/main/java/java/lang/reflect/TypeVariable.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Sat, 26 Jan 2013 08:47:05 +0100
changeset 592 5e13b1ac2886
parent 258 21b390daf444
permissions -rw-r--r--
In order to support fields of the same name in subclasses we are now prefixing them with name of the class that defines them. To provide convenient way to access them from generated bytecode and also directly from JavaScript, there is a getter/setter function for each field. It starts with _ followed by the field name. If called with a parameter, it sets the field, with a parameter it just returns it.
jtulach@258
     1
/*
jtulach@258
     2
 * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
jtulach@258
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
jtulach@258
     4
 *
jtulach@258
     5
 * This code is free software; you can redistribute it and/or modify it
jtulach@258
     6
 * under the terms of the GNU General Public License version 2 only, as
jtulach@258
     7
 * published by the Free Software Foundation.  Oracle designates this
jtulach@258
     8
 * particular file as subject to the "Classpath" exception as provided
jtulach@258
     9
 * by Oracle in the LICENSE file that accompanied this code.
jtulach@258
    10
 *
jtulach@258
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
jtulach@258
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
jtulach@258
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
jtulach@258
    14
 * version 2 for more details (a copy is included in the LICENSE file that
jtulach@258
    15
 * accompanied this code).
jtulach@258
    16
 *
jtulach@258
    17
 * You should have received a copy of the GNU General Public License version
jtulach@258
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
jtulach@258
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
jtulach@258
    20
 *
jtulach@258
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
jtulach@258
    22
 * or visit www.oracle.com if you need additional information or have any
jtulach@258
    23
 * questions.
jtulach@258
    24
 */
jtulach@258
    25
jtulach@258
    26
package java.lang.reflect;
jtulach@258
    27
jtulach@258
    28
/**
jtulach@258
    29
 * TypeVariable is the common superinterface for type variables of kinds.
jtulach@258
    30
 * A type variable is created the first time it is needed by a reflective
jtulach@258
    31
 * method, as specified in this package.  If a type variable t is referenced
jtulach@258
    32
 * by a type (i.e, class, interface or annotation type) T, and T is declared
jtulach@258
    33
 * by the nth enclosing class of T (see JLS 8.1.2), then the creation of t
jtulach@258
    34
 * requires the resolution (see JVMS 5) of the ith enclosing class of T,
jtulach@258
    35
 * for i = 0 to n, inclusive. Creating a type variable must not cause the
jtulach@258
    36
 * creation of its bounds. Repeated creation of a type variable has no effect.
jtulach@258
    37
 *
jtulach@258
    38
 * <p>Multiple objects may be instantiated at run-time to
jtulach@258
    39
 * represent a given type variable. Even though a type variable is
jtulach@258
    40
 * created only once, this does not imply any requirement to cache
jtulach@258
    41
 * instances representing the type variable. However, all instances
jtulach@258
    42
 * representing a type variable must be equal() to each other.
jtulach@258
    43
 * As a consequence, users of type variables must not rely on the identity
jtulach@258
    44
 * of instances of classes implementing this interface.
jtulach@258
    45
 *
jtulach@258
    46
 * @param <D> the type of generic declaration that declared the
jtulach@258
    47
 * underlying type variable.
jtulach@258
    48
 *
jtulach@258
    49
 * @since 1.5
jtulach@258
    50
 */
jtulach@258
    51
public interface TypeVariable<D extends GenericDeclaration> extends Type {
jtulach@258
    52
    /**
jtulach@258
    53
     * Returns an array of {@code Type} objects representing the
jtulach@258
    54
     * upper bound(s) of this type variable.  Note that if no upper bound is
jtulach@258
    55
     * explicitly declared, the upper bound is {@code Object}.
jtulach@258
    56
     *
jtulach@258
    57
     * <p>For each upper bound B: <ul> <li>if B is a parameterized
jtulach@258
    58
     * type or a type variable, it is created, (see {@link
jtulach@258
    59
     * java.lang.reflect.ParameterizedType ParameterizedType} for the
jtulach@258
    60
     * details of the creation process for parameterized types).
jtulach@258
    61
     * <li>Otherwise, B is resolved.  </ul>
jtulach@258
    62
     *
jtulach@258
    63
     * @throws TypeNotPresentException  if any of the
jtulach@258
    64
     *     bounds refers to a non-existent type declaration
jtulach@258
    65
     * @throws MalformedParameterizedTypeException if any of the
jtulach@258
    66
     *     bounds refer to a parameterized type that cannot be instantiated
jtulach@258
    67
     *     for any reason
jtulach@258
    68
     * @return an array of {@code Type}s representing the upper
jtulach@258
    69
     *     bound(s) of this type variable
jtulach@258
    70
    */
jtulach@258
    71
    Type[] getBounds();
jtulach@258
    72
jtulach@258
    73
    /**
jtulach@258
    74
     * Returns the {@code GenericDeclaration} object representing the
jtulach@258
    75
     * generic declaration declared this type variable.
jtulach@258
    76
     *
jtulach@258
    77
     * @return the generic declaration declared for this type variable.
jtulach@258
    78
     *
jtulach@258
    79
     * @since 1.5
jtulach@258
    80
     */
jtulach@258
    81
    D getGenericDeclaration();
jtulach@258
    82
jtulach@258
    83
    /**
jtulach@258
    84
     * Returns the name of this type variable, as it occurs in the source code.
jtulach@258
    85
     *
jtulach@258
    86
     * @return the name of this type variable, as it appears in the source code
jtulach@258
    87
     */
jtulach@258
    88
    String getName();
jtulach@258
    89
}