< prev index next >

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

Print this page

  1 /*
  2  * Copyright (c) 1996, 2020, 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 
 26 package java.lang.reflect;
 27 
 28 import java.util.StringJoiner;
 29 
 30 /**
 31  * The Modifier class provides {@code static} methods and
 32  * constants to decode class and member access modifiers.  The sets of
 33  * modifiers are represented as integers with distinct bit positions

 34  * representing different modifiers.  The values for the constants
 35  * representing the modifiers are taken from the tables in sections
 36  * {@jvms 4.1}, {@jvms 4.4}, {@jvms 4.5}, and {@jvms 4.7} of
 37  * <cite>The Java Virtual Machine Specification</cite>.
 38  *


 39  * @see Class#getModifiers()
 40  * @see Member#getModifiers()
 41  *
 42  * @author Nakul Saraiya
 43  * @author Kenneth Russell
 44  * @since 1.1
 45  */
 46 public class Modifier {
 47     /**
 48      * Do not call.
 49      */
 50     private Modifier() {throw new AssertionError();}
 51 
 52 
 53     /**
 54      * Return {@code true} if the integer argument includes the
 55      * {@code public} modifier, {@code false} otherwise.
 56      *
 57      * @param   mod a set of modifiers
 58      * @return {@code true} if {@code mod} includes the

 97     public static boolean isStatic(int mod) {
 98         return (mod & STATIC) != 0;
 99     }
100 
101     /**
102      * Return {@code true} if the integer argument includes the
103      * {@code final} modifier, {@code false} otherwise.
104      *
105      * @param   mod a set of modifiers
106      * @return {@code true} if {@code mod} includes the
107      * {@code final} modifier; {@code false} otherwise.
108      */
109     public static boolean isFinal(int mod) {
110         return (mod & FINAL) != 0;
111     }
112 
113     /**
114      * Return {@code true} if the integer argument includes the
115      * {@code synchronized} modifier, {@code false} otherwise.
116      *



117      * @param   mod a set of modifiers
118      * @return {@code true} if {@code mod} includes the
119      * {@code synchronized} modifier; {@code false} otherwise.
120      */
121     public static boolean isSynchronized(int mod) {
122         return (mod & SYNCHRONIZED) != 0;
123     }
124 















125     /**
126      * Return {@code true} if the integer argument includes the
127      * {@code volatile} modifier, {@code false} otherwise.
128      *
129      * @param   mod a set of modifiers
130      * @return {@code true} if {@code mod} includes the
131      * {@code volatile} modifier; {@code false} otherwise.
132      */
133     public static boolean isVolatile(int mod) {
134         return (mod & VOLATILE) != 0;
135     }
136 















137     /**
138      * Return {@code true} if the integer argument includes the
139      * {@code transient} modifier, {@code false} otherwise.
140      *
141      * @param   mod a set of modifiers
142      * @return {@code true} if {@code mod} includes the
143      * {@code transient} modifier; {@code false} otherwise.
144      */
145     public static boolean isTransient(int mod) {
146         return (mod & TRANSIENT) != 0;
147     }
148 
149     /**
150      * Return {@code true} if the integer argument includes the
151      * {@code native} modifier, {@code false} otherwise.
152      *
153      * @param   mod a set of modifiers
154      * @return {@code true} if {@code mod} includes the
155      * {@code native} modifier; {@code false} otherwise.
156      */

276      * The {@code int} value representing the {@code static}
277      * modifier.
278      * @see AccessFlag#STATIC
279      */
280     public static final int STATIC           = 0x00000008;
281 
282     /**
283      * The {@code int} value representing the {@code final}
284      * modifier.
285      * @see AccessFlag#FINAL
286      */
287     public static final int FINAL            = 0x00000010;
288 
289     /**
290      * The {@code int} value representing the {@code synchronized}
291      * modifier.
292      * @see AccessFlag#SYNCHRONIZED
293      */
294     public static final int SYNCHRONIZED     = 0x00000020;
295 













296     /**
297      * The {@code int} value representing the {@code volatile}
298      * modifier.
299      * @see AccessFlag#VOLATILE
300      */
301     public static final int VOLATILE         = 0x00000040;
302 
303     /**
304      * The {@code int} value representing the {@code transient}
305      * modifier.
306      * @see AccessFlag#TRANSIENT
307      */
308     public static final int TRANSIENT        = 0x00000080;
309 
310     /**
311      * The {@code int} value representing the {@code native}
312      * modifier.
313      * @see AccessFlag#NATIVE
314      */
315     public static final int NATIVE           = 0x00000100;

353       return (mod & MANDATED) != 0;
354     }
355 
356     // Note on the FOO_MODIFIERS fields and fooModifiers() methods:
357     // the sets of modifiers are not guaranteed to be constants
358     // across time and Java SE releases. Therefore, it would not be
359     // appropriate to expose an external interface to this information
360     // that would allow the values to be treated as Java-level
361     // constants since the values could be constant folded and updates
362     // to the sets of modifiers missed. Thus, the fooModifiers()
363     // methods return an unchanging values for a given release, but a
364     // value that can potentially change over time.
365 
366     /**
367      * The Java source modifiers that can be applied to a class.
368      * @jls 8.1.1 Class Modifiers
369      */
370     private static final int CLASS_MODIFIERS =
371         Modifier.PUBLIC         | Modifier.PROTECTED    | Modifier.PRIVATE |
372         Modifier.ABSTRACT       | Modifier.STATIC       | Modifier.FINAL   |

373         Modifier.STRICT;
374 
375     /**
376      * The Java source modifiers that can be applied to an interface.
377      * @jls 9.1.1 Interface Modifiers
378      */
379     private static final int INTERFACE_MODIFIERS =
380         Modifier.PUBLIC         | Modifier.PROTECTED    | Modifier.PRIVATE |
381         Modifier.ABSTRACT       | Modifier.STATIC       | Modifier.STRICT;
382 
383 
384     /**
385      * The Java source modifiers that can be applied to a constructor.
386      * @jls 8.8.3 Constructor Modifiers
387      */
388     private static final int CONSTRUCTOR_MODIFIERS =
389         Modifier.PUBLIC         | Modifier.PROTECTED    | Modifier.PRIVATE;
390 
391     /**
392      * The Java source modifiers that can be applied to a method.

  1 /*
  2  * Copyright (c) 1996, 2022, 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 
 26 package java.lang.reflect;
 27 
 28 import java.util.StringJoiner;
 29 
 30 /**
 31  * The Modifier class provides {@code static} methods and
 32  * constants to decode class and member access modifiers.
 33  * The {@link AccessFlag} class should be used instead of this class.
 34  * The sets of modifiers are represented as integers with non-distinct bit positions
 35  * representing different modifiers.  The values for the constants
 36  * representing the modifiers are taken from the tables in sections
 37  * {@jvms 4.1}, {@jvms 4.4}, {@jvms 4.5}, and {@jvms 4.7} of
 38  * <cite>The Java Virtual Machine Specification</cite>.
 39  *
 40  * @see Class#accessFlags()
 41  * @see Member#accessFlags()
 42  * @see Class#getModifiers()
 43  * @see Member#getModifiers()
 44  *
 45  * @author Nakul Saraiya
 46  * @author Kenneth Russell
 47  * @since 1.1
 48  */
 49 public class Modifier {
 50     /**
 51      * Do not call.
 52      */
 53     private Modifier() {throw new AssertionError();}
 54 
 55 
 56     /**
 57      * Return {@code true} if the integer argument includes the
 58      * {@code public} modifier, {@code false} otherwise.
 59      *
 60      * @param   mod a set of modifiers
 61      * @return {@code true} if {@code mod} includes the

100     public static boolean isStatic(int mod) {
101         return (mod & STATIC) != 0;
102     }
103 
104     /**
105      * Return {@code true} if the integer argument includes the
106      * {@code final} modifier, {@code false} otherwise.
107      *
108      * @param   mod a set of modifiers
109      * @return {@code true} if {@code mod} includes the
110      * {@code final} modifier; {@code false} otherwise.
111      */
112     public static boolean isFinal(int mod) {
113         return (mod & FINAL) != 0;
114     }
115 
116     /**
117      * Return {@code true} if the integer argument includes the
118      * {@code synchronized} modifier, {@code false} otherwise.
119      *
120      * @apiNote {@code isSynchronized} should only be called with the modifiers
121      * of a {@linkplain Method#getModifiers() method}.
122      *
123      * @param   mod a set of modifiers
124      * @return {@code true} if {@code mod} includes the
125      * {@code synchronized} modifier; {@code false} otherwise.
126      */
127     public static boolean isSynchronized(int mod) {
128         return (mod & SYNCHRONIZED) != 0;
129     }
130 
131     /**
132      * Return {@code true} if the integer argument includes the
133      * {@code identity} modifier, {@code false} otherwise.
134      *
135      * @apiNote {@code isIdentity} should only be called with the modifiers
136      * of a {@linkplain Class#getModifiers() class}.
137      *
138      * @param   mod a set of modifiers
139      * @return {@code true} if {@code mod} includes the
140      * {@code identity} modifier; {@code false} otherwise.
141      */
142     public static boolean isIdentity(int mod) {
143         return (mod & IDENTITY) != 0;
144     }
145 
146     /**
147      * Return {@code true} if the integer argument includes the
148      * {@code volatile} modifier, {@code false} otherwise.
149      *
150      * @param   mod a set of modifiers
151      * @return {@code true} if {@code mod} includes the
152      * {@code volatile} modifier; {@code false} otherwise.
153      */
154     public static boolean isVolatile(int mod) {
155         return (mod & VOLATILE) != 0;
156     }
157 
158     /**
159      * Return {@code true} if the integer argument includes the
160      * {@code value} modifier, {@code false} otherwise.
161      *
162      * @apiNote {@code isValue} should only be called with the modifiers
163      * of a {@linkplain Class#getModifiers() class}.
164      *
165      * @param   mod a set of modifiers
166      * @return {@code true} if {@code mod} includes the
167      * {@code value} modifier; {@code false} otherwise.
168      */
169     public static boolean isValue(int mod) {
170         return (mod & VALUE) != 0;
171     }
172 
173     /**
174      * Return {@code true} if the integer argument includes the
175      * {@code transient} modifier, {@code false} otherwise.
176      *
177      * @param   mod a set of modifiers
178      * @return {@code true} if {@code mod} includes the
179      * {@code transient} modifier; {@code false} otherwise.
180      */
181     public static boolean isTransient(int mod) {
182         return (mod & TRANSIENT) != 0;
183     }
184 
185     /**
186      * Return {@code true} if the integer argument includes the
187      * {@code native} modifier, {@code false} otherwise.
188      *
189      * @param   mod a set of modifiers
190      * @return {@code true} if {@code mod} includes the
191      * {@code native} modifier; {@code false} otherwise.
192      */

312      * The {@code int} value representing the {@code static}
313      * modifier.
314      * @see AccessFlag#STATIC
315      */
316     public static final int STATIC           = 0x00000008;
317 
318     /**
319      * The {@code int} value representing the {@code final}
320      * modifier.
321      * @see AccessFlag#FINAL
322      */
323     public static final int FINAL            = 0x00000010;
324 
325     /**
326      * The {@code int} value representing the {@code synchronized}
327      * modifier.
328      * @see AccessFlag#SYNCHRONIZED
329      */
330     public static final int SYNCHRONIZED     = 0x00000020;
331 
332     /**
333      * The {@code int} value representing the {@code ACC_IDENTITY}
334      * modifier.
335      */
336     public static final int IDENTITY         = 0x00000020;
337 
338     /**
339      * The {@code int} value representing the {@code value}
340      * modifier.
341      * @see AccessFlag#VALUE
342      */
343     public static final int VALUE            = 0x00000040;
344 
345     /**
346      * The {@code int} value representing the {@code volatile}
347      * modifier.
348      * @see AccessFlag#VOLATILE
349      */
350     public static final int VOLATILE         = 0x00000040;
351 
352     /**
353      * The {@code int} value representing the {@code transient}
354      * modifier.
355      * @see AccessFlag#TRANSIENT
356      */
357     public static final int TRANSIENT        = 0x00000080;
358 
359     /**
360      * The {@code int} value representing the {@code native}
361      * modifier.
362      * @see AccessFlag#NATIVE
363      */
364     public static final int NATIVE           = 0x00000100;

402       return (mod & MANDATED) != 0;
403     }
404 
405     // Note on the FOO_MODIFIERS fields and fooModifiers() methods:
406     // the sets of modifiers are not guaranteed to be constants
407     // across time and Java SE releases. Therefore, it would not be
408     // appropriate to expose an external interface to this information
409     // that would allow the values to be treated as Java-level
410     // constants since the values could be constant folded and updates
411     // to the sets of modifiers missed. Thus, the fooModifiers()
412     // methods return an unchanging values for a given release, but a
413     // value that can potentially change over time.
414 
415     /**
416      * The Java source modifiers that can be applied to a class.
417      * @jls 8.1.1 Class Modifiers
418      */
419     private static final int CLASS_MODIFIERS =
420         Modifier.PUBLIC         | Modifier.PROTECTED    | Modifier.PRIVATE |
421         Modifier.ABSTRACT       | Modifier.STATIC       | Modifier.FINAL   |
422         Modifier.IDENTITY       | Modifier.VALUE        |
423         Modifier.STRICT;
424 
425     /**
426      * The Java source modifiers that can be applied to an interface.
427      * @jls 9.1.1 Interface Modifiers
428      */
429     private static final int INTERFACE_MODIFIERS =
430         Modifier.PUBLIC         | Modifier.PROTECTED    | Modifier.PRIVATE |
431         Modifier.ABSTRACT       | Modifier.STATIC       | Modifier.STRICT;
432 
433 
434     /**
435      * The Java source modifiers that can be applied to a constructor.
436      * @jls 8.8.3 Constructor Modifiers
437      */
438     private static final int CONSTRUCTOR_MODIFIERS =
439         Modifier.PUBLIC         | Modifier.PROTECTED    | Modifier.PRIVATE;
440 
441     /**
442      * The Java source modifiers that can be applied to a method.
< prev index next >