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解析时未通过访问检查的情况。