< prev index next >
src/java.base/share/classes/java/lang/reflect/Proxy.java
Print this page
*** 162,172 ****
* {@link Proxy#getProxyClass(ClassLoader, Class[])} or
* {@link Proxy#newProxyInstance(ClassLoader, Class[], InvocationHandler)}
* methods is specified as follows:
*
* <ol>
! * <li>If all the proxy interfaces are in <em>exported</em> packages:
* <ol type="a">
* <li>if all the proxy interfaces are <em>public</em>, then the proxy class is
* <em>public</em> in a package exported by the
* {@linkplain ClassLoader#getUnnamedModule() unnamed module} of the specified
* loader. The name of the package is unspecified.</li>
--- 162,173 ----
* {@link Proxy#getProxyClass(ClassLoader, Class[])} or
* {@link Proxy#newProxyInstance(ClassLoader, Class[], InvocationHandler)}
* methods is specified as follows:
*
* <ol>
! * <li>If all the proxy interfaces are in <em>exported</em> or <em>open</em>
! * packages:
* <ol type="a">
* <li>if all the proxy interfaces are <em>public</em>, then the proxy class is
* <em>public</em> in a package exported by the
* {@linkplain ClassLoader#getUnnamedModule() unnamed module} of the specified
* loader. The name of the package is unspecified.</li>
*** 176,189 ****
* non-public interfaces. All the non-public interfaces must be in the same
* package and module; otherwise, proxying them is
* <a href="#restrictions">not possible</a>.</li>
* </ol>
* </li>
! * <li>If at least one proxy interface is a <em>non-exported</em> package:
* <ol type="a">
* <li>if all the proxy interfaces are <em>public</em>, then the proxy class is
! * <em>public</em> in a <em>non-exported</em> package of
* <a href="#dynamicmodule"><em>dynamic module</em>.</a>
* The names of the package and the module are unspecified.</li>
*
* <li>if at least one of all the proxy interfaces is <em>non-public</em>, then
* the proxy class is <em>non-public</em> in the package and module of the
--- 177,191 ----
* non-public interfaces. All the non-public interfaces must be in the same
* package and module; otherwise, proxying them is
* <a href="#restrictions">not possible</a>.</li>
* </ol>
* </li>
! * <li>If at least one proxy interface is in a package that is
! * <em>non-exported</em> and <em>non-open</em>:
* <ol type="a">
* <li>if all the proxy interfaces are <em>public</em>, then the proxy class is
! * <em>public</em> in a <em>non-exported</em>, <em>non-open</em> package of
* <a href="#dynamicmodule"><em>dynamic module</em>.</a>
* The names of the package and the module are unspecified.</li>
*
* <li>if at least one of all the proxy interfaces is <em>non-public</em>, then
* the proxy class is <em>non-public</em> in the package and module of the
*** 193,217 ****
* </ol>
* </li>
* </ol>
*
* <p>
! * Note that if proxy interfaces with a mix of accessibilities --
! * exported public, exported non-public, non-exported public, non-exported non-public --
! * are proxied by the same instance, then the proxy class's accessibility is
* governed by the least accessible proxy interface.
* <p>
* Note that it is possible for arbitrary code to obtain access to a proxy class
! * in an exported package with {@link AccessibleObject#setAccessible setAccessible},
! * whereas a proxy class in a non-exported package is never accessible to
* code outside the module of the proxy class.
*
* <p>
! * Throughout this specification, a "non-exported package" refers to a package that
! * is not exported to all modules. Specifically, it refers to a package that
! * either is not exported at all by its containing module or is exported in a
! * qualified fashion by its containing module.
*
* <h3><a name="dynamicmodule">Dynamic Modules</a></h3>
* <p>
* A dynamic module is a named module generated at runtime. A proxy class
* defined in a dynamic module is encapsulated and not accessible to any module.
--- 195,220 ----
* </ol>
* </li>
* </ol>
*
* <p>
! * Note that if proxy interfaces with a mix of accessibilities -- for example,
! * an exported public interface and a non-exported non-public interface -- are
! * proxied by the same instance, then the proxy class's accessibility is
* governed by the least accessible proxy interface.
* <p>
* Note that it is possible for arbitrary code to obtain access to a proxy class
! * in an open package with {@link AccessibleObject#setAccessible setAccessible},
! * whereas a proxy class in a non-open package is never accessible to
* code outside the module of the proxy class.
*
* <p>
! * Throughout this specification, a "non-exported package" refers to a package
! * that is not exported to all modules, and a "non-open package" refers to
! * a package that is not open to all modules. Specifically, these terms refer to
! * a package that either is not exported/open by its containing module or is
! * exported/open in a qualified fashion by its containing module.
*
* <h3><a name="dynamicmodule">Dynamic Modules</a></h3>
* <p>
* A dynamic module is a named module generated at runtime. A proxy class
* defined in a dynamic module is encapsulated and not accessible to any module.
*** 270,279 ****
--- 273,284 ----
* successfully by the {@code invoke} method.
*
* @author Peter Jones
* @see InvocationHandler
* @since 1.3
+ * @revised 9
+ * @spec JPMS
*/
public class Proxy implements java.io.Serializable {
private static final long serialVersionUID = -2222568056686623797L;
/** parameter types of a proxy class constructor */
*** 356,365 ****
--- 361,372 ----
* {@code IllegalAccessException} when it is called on an inaccessible proxy class.
* Use {@link #newProxyInstance(ClassLoader, Class[], InvocationHandler)}
* to create a proxy instance instead.
*
* @see <a href="#membership">Package and Module Membership of Proxy Class</a>
+ * @revised 9
+ * @spec JPMS
*/
@Deprecated
@CallerSensitive
public static Class<?> getProxyClass(ClassLoader loader,
Class<?>... interfaces)
*** 953,962 ****
--- 960,971 ----
* argument or any of its elements are {@code null}, or
* if the invocation handler, {@code h}, is
* {@code null}
*
* @see <a href="#membership">Package and Module Membership of Proxy Class</a>
+ * @revised 9
+ * @spec JPMS
*/
@CallerSensitive
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h) {
*** 1037,1046 ****
--- 1046,1058 ----
*
* @param cl the class to test
* @return {@code true} if the class is a proxy class and
* {@code false} otherwise
* @throws NullPointerException if {@code cl} is {@code null}
+ *
+ * @revised 9
+ * @spec JPMS
*/
public static boolean isProxyClass(Class<?> cl) {
return Proxy.class.isAssignableFrom(cl) && ProxyBuilder.isProxyClass(cl);
}
< prev index next >