相关疑难解决方法(0)

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

为了能够更好地判断移植到Java 9时的反射风险,我想知道只要引用可访问类型,浅层反射代替静态编译是否安全:

我的意思是,我可以随时更换

PublicType p = (PublicType)(Factory.instance());
p.publicMethod();
Run Code Online (Sandbox Code Playgroud)

(Factory.instance()返回类型在哪里Object,将Package.PublicType从未打开的模块返回API类型()的子类型.

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?
Run Code Online (Sandbox Code Playgroud)

这个问题的早期版本关于我同时解决的特定代码问题.

但是一般的问题也很有意思:在返回的对象具有正确的子类型但是在调用或MethodHandle解析时无法进行访问检查.

java reflection java-platform-module-system java-9

6
推荐指数
0
解决办法
182
查看次数