-
CSR
-
Resolution: Approved
-
P2
-
None
-
behavioral
-
minimal
-
JEP 409 Sealed classes becomes a permanent Java SE feature in 17. No compatibility risk with this spec change.
-
Java API
-
SE
Summary
java.lang.reflect.Proxy::newProxyInstance
will throw IllegalArgumentException
if one of the given proxy interfaces is sealed. Similiarly, java.lang.invoke.MethodHandleProxies::asInterfaceInstance
will throw IllegalArgumentException
if the given interface is sealed.
Problem
Proxy and MethodHandleProxies API do not specify how to deal with sealed interfaces.
Solution
Update the specification of Proxy::newProxyInstance
and MethodHandleProxies::asInterfaceInstance
to restrict proxy interfaces to be non-sealed; otherwise, it will throw IllegalArgumentException
Specification
Changes to java.lang.reflect.Proxy::newProxyInstance
spec:
* <a id="restrictions">{@code IllegalArgumentException} will be thrown
* if any of the following restrictions is violated:</a>
* <ul>
* <li>All of {@code Class} objects in the given {@code interfaces} array
- * must represent {@linkplain Class#isHidden() non-hidden} interfaces,
+ * must represent {@linkplain Class#isHidden() non-hidden} and
+ * {@linkplain Class#isSealed() non-sealed} interfaces,
* not classes or primitive types.
*
* <li>No two elements in the {@code interfaces} array may
and changes to java.lang.invoke.MethodHandleProxies::asInterfaceInstance
--- a/src/java.base/share/classes/java/lang/invoke/MethodHandleProxies.java
+++ b/src/java.base/share/classes/java/lang/invoke/MethodHandleProxies.java
@@ -59,7 +59,8 @@ public class MethodHandleProxies {
* even though it re-declares the {@code Object.equals} method and also
* declares default methods, such as {@code Comparator.reverse}.
* <p>
- * The interface must be public. No additional access checks are performed.
+ * The interface must be public and not {@linkplain Class#isSealed() sealed}.
+ * No additional access checks are performed.
* <p>
* The resulting instance of the required type will respond to
* invocation of the type's uniquely named method by calling
- csr of
-
JDK-8269351 Proxy::newProxyInstance and MethodHandleProxies::asInterfaceInstance should reject sealed interfaces
- Closed