src/share/classes/java/lang/reflect/Modifier.java

Print this page

        

@@ -348,49 +348,71 @@
 
     static boolean isMandated(int mod) {
       return (mod & MANDATED) != 0;
     }
 
+    // Note on the FOO_MODIFIERS fields and fooModifiers() methods:
+    // the sets of modifiers are not guaranteed to be constants
+    // across time and Java SE releases. Therefore, it would not be
+    // appropriate to expose an external interface to this information
+    // that would allow the values to be treated as Java-level
+    // constants since the values could be constant folded and updates
+    // to the sets of modifiers missed. Thus, the fooModifiers()
+    // methods return an unchanging values for a given release, but a
+    // value that can change over time.
+
     /**
-     * See JLSv3 section 8.1.1.
+     * The Java source modifiers that can be applied to a class.
+     * @jls 8.1.1 Class Modifiers
      */
     private static final int CLASS_MODIFIERS =
         Modifier.PUBLIC         | Modifier.PROTECTED    | Modifier.PRIVATE |
         Modifier.ABSTRACT       | Modifier.STATIC       | Modifier.FINAL   |
         Modifier.STRICT;
 
     /**
-     * See JLSv3 section 9.1.1.
+     * The Java source modifiers that can be applied to an interface.
+     * @jls 9.1.1 Interface Modifiers
      */
     private static final int INTERFACE_MODIFIERS =
         Modifier.PUBLIC         | Modifier.PROTECTED    | Modifier.PRIVATE |
         Modifier.ABSTRACT       | Modifier.STATIC       | Modifier.STRICT;
 
 
     /**
-     * See JLSv3 section 8.8.3.
+     * The Java source modifiers that can be applied to a constructor.
+     * @jls 8.8.3 Constructor Modifiers
      */
     private static final int CONSTRUCTOR_MODIFIERS =
         Modifier.PUBLIC         | Modifier.PROTECTED    | Modifier.PRIVATE;
 
     /**
-     * See JLSv3 section 8.4.3.
+     * The Java source modifiers that can be applied to a method.
+     * @jls8.4.3  Method Modifiers
      */
     private static final int METHOD_MODIFIERS =
         Modifier.PUBLIC         | Modifier.PROTECTED    | Modifier.PRIVATE |
         Modifier.ABSTRACT       | Modifier.STATIC       | Modifier.FINAL   |
         Modifier.SYNCHRONIZED   | Modifier.NATIVE       | Modifier.STRICT;
 
     /**
-     * See JLSv3 section 8.3.1.
+     * The Java source modifiers that can be applied to a field.
+     * @jls 8.3.1  Field Modifiers
      */
     private static final int FIELD_MODIFIERS =
         Modifier.PUBLIC         | Modifier.PROTECTED    | Modifier.PRIVATE |
         Modifier.STATIC         | Modifier.FINAL        | Modifier.TRANSIENT |
         Modifier.VOLATILE;
 
     /**
+     * The Java source modifiers that can be applied to a method or constructor parameter.
+     * @jls 8.4.1 Formal Parameters
+     */
+    private static final int PARAMETER_MODIFIERS =
+        Modifier.FINAL;
+
+    /**
      *
      */
     static final int ACCESS_MODIFIERS =
         Modifier.PUBLIC | Modifier.PROTECTED | Modifier.PRIVATE;
 

@@ -409,11 +431,11 @@
 
     /**
      * Return an {@code int} value OR-ing together the source language
      * modifiers that can be applied to an interface.
      * @return an {@code int} value OR-ing together the source language
-     * modifiers that can be applied to an inteface.
+     * modifiers that can be applied to an interface.
      *
      * @jls 9.1.1 Interface Modifiers
      * @since 1.7
      */
     public static int interfaceModifiers() {

@@ -444,11 +466,10 @@
      */
     public static int methodModifiers() {
         return METHOD_MODIFIERS;
     }
 
-
     /**
      * Return an {@code int} value OR-ing together the source language
      * modifiers that can be applied to a field.
      * @return an {@code int} value OR-ing together the source language
      * modifiers that can be applied to a field.

@@ -457,6 +478,19 @@
      * @since 1.7
      */
     public static int fieldModifiers() {
         return FIELD_MODIFIERS;
     }
+
+    /**
+     * Return an {@code int} value OR-ing together the source language
+     * modifiers that can be applied to a parameter.
+     * @return an {@code int} value OR-ing together the source language
+     * modifiers that can be applied to a parameter.
+     *
+     * @jls 8.4.1 Formal Parameters
+     * @since 1.8
+     */
+    public static int parameterModifiers() {
+        return PARAMETER_MODIFIERS;
+    }
 }