给定一个java.lang.reflect.Method
对象,是否可以确定该方法是否是纯函数式的(即,给定相同的输入,它总是会产生相同的输出并且它是无状态的。换句话说,该函数不依赖于它的环境)?
问问题
424 次
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 回答