< 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 >