001    /*
002     * Copyright 2005-2006 Sun Microsystems, Inc.  All Rights Reserved.
003     * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004     *
005     * This code is free software; you can redistribute it and/or modify it
006     * under the terms of the GNU General Public License version 2 only, as
007     * published by the Free Software Foundation.  Sun designates this
008     * particular file as subject to the "Classpath" exception as provided
009     * by Sun in the LICENSE file that accompanied this code.
010     *
011     * This code is distributed in the hope that it will be useful, but WITHOUT
012     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013     * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
014     * version 2 for more details (a copy is included in the LICENSE file that
015     * accompanied this code).
016     *
017     * You should have received a copy of the GNU General Public License version
018     * 2 along with this work; if not, write to the Free Software Foundation,
019     * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020     *
021     * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022     * CA 95054 USA or visit www.sun.com if you need additional information or
023     * have any questions.
024     */
025    
026    package javax.lang.model.element;
027    
028    import javax.lang.model.type.TypeMirror;
029    import javax.lang.model.util.Elements;
030    
031    
032    /**
033     * Represents a field, {@code enum} constant, method or constructor
034     * parameter, local variable, or exception parameter.
035     *
036     * @author Joseph D. Darcy
037     * @author Scott Seligman
038     * @author Peter von der Ahé
039     * @since 1.6
040     */
041    
042    public interface VariableElement extends Element {
043    
044        /**
045         * Returns the value of this variable if this is a {@code final}
046         * field initialized to a compile-time constant.  Returns {@code
047         * null} otherwise.  The value will be of a primitive type or a
048         * {@code String}.  If the value is of a primitive type, it is
049         * wrapped in the appropriate wrapper class (such as {@link
050         * Integer}).
051         *
052         * <p>Note that not all {@code final} fields will have
053         * constant values.  In particular, {@code enum} constants are
054         * <em>not</em> considered to be compile-time constants.  To have a
055         * constant value, a field's type must be either a primitive type
056         * or {@code String}.
057         *
058         * @return the value of this variable if this is a {@code final}
059         * field initialized to a compile-time constant, or {@code null}
060         * otherwise
061         *
062         * @see Elements#getConstantExpression(Object)
063         * @jls3 15.28 Constant Expression
064         * @jls3 4.12.4 final Variables
065         */
066        Object getConstantValue();
067    }