Java 9模块,静态意味着浅层反射?

时间:2017-10-10 08:48:54

标签: java reflection java-9 jigsaw

为了能够更好地判断移植到Java 9时的反射风险我想知道shallow 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?

这个问题的早期版本大约有specific code problem,我同时解决了这个问题。

但是一般性的问题也很有趣,可以讨论:是否存在返回的对象具有正确的子类型但在调用或MethodHandle解析时未通过访问检查的情况。

0 个答案:

没有答案