9

给定一个java.lang.reflect.Method对象,是否可以确定该方法是否是纯函数式的(即,给定相同的输入,它总是会产生相同的输出并且它是无状态的。换句话说,该函数不依赖于它的环境)?

4

5 回答 5

9

不,没有办法做到这一点。

反射不允许您检查方法背后的实际代码。

即使在可能的情况下,实际分析也可能......至少可以说是棘手的。

于 2013-12-12T15:30:30.160 回答
7

不,没有办法通过反射或任何其他机制来做到这一点。

开发人员知道该方法是否有效。例如,Spring 有一个@Cacheable注解,它向应用程序提示该方法是有效的,因此可以缓存给定参数集的结果。(Spring 会将您的对象包装在提供缓存行为的代理中。)

于 2013-12-12T15:31:13.640 回答
0

无论如何确定该方法是否是纯功能性的(即,给定相同的输入,它总是会产生相同的输出

我知道这是您现在所要求的,但单元测试可能会帮助您解决这个问题。

于 2013-12-12T15:31:12.897 回答
0

不,反射不能读取方法的字节码。所以你不能真正说出一个方法做什么,甚至它使用了哪些其他类。

于 2013-12-12T15:32:05.863 回答
0

反思在这里对你没有帮助。如果你真的想在运行时定义它,你可以尝试使用javap -c classname.class. 但最好避免这样的黑客攻击。

于 2013-12-12T15:49:31.093 回答