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 the type of generic declaration that declared the jtulach@258: * underlying type variable. jtulach@258: * jtulach@258: * @since 1.5 jtulach@258: */ jtulach@258: public interface TypeVariable extends Type { jtulach@258: /** jtulach@258: * Returns an array of {@code Type} objects representing the jtulach@258: * upper bound(s) of this type variable. Note that if no upper bound is jtulach@258: * explicitly declared, the upper bound is {@code Object}. jtulach@258: * jtulach@258: *

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: }