Java 9模块,静态意味着浅层reflection?
为了能够在移植到Java 9时更好地判断reflection的风险,我想知道只要引用可访问类型, 浅reflection代替静态编译是否安全:
我的意思是,我可以随时更换
PublicType p = (PublicType)(Factory.instance()); p.publicMethod();
(其中Factory.instance()
具有返回类型Object
,并将从未打开的模块返回API类型的子类型( Package.PublicType
)。
同
Object p = Factory.instance(); Class c = Class.forName("package.PublicType"); Method m = c.getMethod("publicMethod", (Class[])null); // assert p instanceof package.PublicType m.invoke(p, (Object[])null); // throws?
这个问题的早期版本关于我同时解决的特定代码问题 。
但是,一般的问题也很有趣,可以讨论:是否存在返回的对象具有正确的子类型但在调用或MethodHandle解析时未通过访问检查的情况。
- HSQL数据库用户缺少权限或对象未找到错误
- Java 8偷看vs地图
- 如何在Java中生成一次密钥并在2个不同的程序中使用该密钥
- java.lang.AbstractMethodError:com.mysql.jdbc.PreparedStatement.setBlob(ILjava / io / InputStream;)V
- Apache Pivot 1.4与JavaFX,Flex,Silverlight,Swing
- java.net.SocketException:没有可用的缓冲区空间(达到最大连接数?):connect
- 奇怪的InetAddress.isReachable()问题
- 在C#或Java中进行Base64解码
- 用于OS X Gatekeeper的代码签名Java应用程序