TypeVariable.java revision 2571:10fc81ac75b4
1/* 2 * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26package javax.lang.model.type; 27 28 29import javax.lang.model.element.Element; 30import javax.lang.model.element.TypeParameterElement; 31import javax.lang.model.util.Types; 32 33 34/** 35 * Represents a type variable. 36 * A type variable may be explicitly declared by a 37 * {@linkplain TypeParameterElement type parameter} of a 38 * type, method, or constructor. 39 * A type variable may also be declared implicitly, as by 40 * the capture conversion of a wildcard type argument 41 * (see chapter 5 of 42 * <cite>The Java™ Language Specification</cite>). 43 * 44 * @author Joseph D. Darcy 45 * @author Scott Seligman 46 * @author Peter von der Ahé 47 * @see TypeParameterElement 48 * @since 1.6 49 */ 50public interface TypeVariable extends ReferenceType { 51 52 /** 53 * Returns the element corresponding to this type variable. 54 * 55 * @return the element corresponding to this type variable 56 */ 57 Element asElement(); 58 59 /** 60 * Returns the upper bound of this type variable. 61 * 62 * <p> If this type variable was declared with no explicit 63 * upper bounds, the result is {@code java.lang.Object}. 64 * If it was declared with multiple upper bounds, 65 * the result is an {@linkplain IntersectionType intersection type}; 66 * individual bounds can be found by examining the result's 67 * {@linkplain IntersectionType#getBounds() bounds}. 68 * 69 * @return the upper bound of this type variable 70 */ 71 TypeMirror getUpperBound(); 72 73 /** 74 * Returns the lower bound of this type variable. While a type 75 * parameter cannot include an explicit lower bound declaration, 76 * capture conversion can produce a type variable with a 77 * non-trivial lower bound. Type variables otherwise have a 78 * lower bound of {@link NullType}. 79 * 80 * @return the lower bound of this type variable 81 */ 82 TypeMirror getLowerBound(); 83} 84