jtulach@258: /* jtulach@258: * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. jtulach@258: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. jtulach@258: * jtulach@258: * This code is free software; you can redistribute it and/or modify it jtulach@258: * under the terms of the GNU General Public License version 2 only, as jtulach@258: * published by the Free Software Foundation. Oracle designates this jtulach@258: * particular file as subject to the "Classpath" exception as provided jtulach@258: * by Oracle in the LICENSE file that accompanied this code. jtulach@258: * jtulach@258: * This code is distributed in the hope that it will be useful, but WITHOUT jtulach@258: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or jtulach@258: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License jtulach@258: * version 2 for more details (a copy is included in the LICENSE file that jtulach@258: * accompanied this code). jtulach@258: * jtulach@258: * You should have received a copy of the GNU General Public License version jtulach@258: * 2 along with this work; if not, write to the Free Software Foundation, jtulach@258: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. jtulach@258: * jtulach@258: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA jtulach@258: * or visit www.oracle.com if you need additional information or have any jtulach@258: * questions. jtulach@258: */ jtulach@258: jtulach@258: package java.lang.reflect; jtulach@258: jtulach@258: /** jtulach@258: * TypeVariable is the common superinterface for type variables of kinds. jtulach@258: * A type variable is created the first time it is needed by a reflective jtulach@258: * method, as specified in this package. If a type variable t is referenced jtulach@258: * by a type (i.e, class, interface or annotation type) T, and T is declared jtulach@258: * by the nth enclosing class of T (see JLS 8.1.2), then the creation of t jtulach@258: * requires the resolution (see JVMS 5) of the ith enclosing class of T, jtulach@258: * for i = 0 to n, inclusive. Creating a type variable must not cause the jtulach@258: * creation of its bounds. Repeated creation of a type variable has no effect. jtulach@258: * jtulach@258: *
Multiple objects may be instantiated at run-time to
jtulach@258: * represent a given type variable. Even though a type variable is
jtulach@258: * created only once, this does not imply any requirement to cache
jtulach@258: * instances representing the type variable. However, all instances
jtulach@258: * representing a type variable must be equal() to each other.
jtulach@258: * As a consequence, users of type variables must not rely on the identity
jtulach@258: * of instances of classes implementing this interface.
jtulach@258: *
jtulach@258: * @param For each upper bound B:
jtulach@258: *
jtulach@258: * @throws TypeNotPresentException if any of the
jtulach@258: * bounds refers to a non-existent type declaration
jtulach@258: * @throws MalformedParameterizedTypeException if any of the
jtulach@258: * bounds refer to a parameterized type that cannot be instantiated
jtulach@258: * for any reason
jtulach@258: * @return an array of {@code Type}s representing the upper
jtulach@258: * bound(s) of this type variable
jtulach@258: */
jtulach@258: Type[] getBounds();
jtulach@258:
jtulach@258: /**
jtulach@258: * Returns the {@code GenericDeclaration} object representing the
jtulach@258: * generic declaration declared this type variable.
jtulach@258: *
jtulach@258: * @return the generic declaration declared for this type variable.
jtulach@258: *
jtulach@258: * @since 1.5
jtulach@258: */
jtulach@258: D getGenericDeclaration();
jtulach@258:
jtulach@258: /**
jtulach@258: * Returns the name of this type variable, as it occurs in the source code.
jtulach@258: *
jtulach@258: * @return the name of this type variable, as it appears in the source code
jtulach@258: */
jtulach@258: String getName();
jtulach@258: }