gpt4 book ai didi

java - 为什么 Javascript(在 Rhino 中运行)无法访问 java.lang.reflect.Method 实例上的方法?

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:38 24 4
gpt4 key购买 nike

这是我所看到的一个非常简单的示例:

jrunscript -f -
js> var d = new java.util.Date();
js> var m = d.getClass().getMethods();
js> println(m[0].getClass().getName());
java.lang.reflect.Method
js> var name = m[0].getName();
script error: sun.org.mozilla.javascript.internal.WrappedException: Wrapped java.lang.UnsupportedOperationException: invocation not supported (<STDIN>#1) in <STDIN> at line number 1
js> var time = d.getTime();
js> println(time);
1278421741768
js>

变量“d”是一个 Java“Date”实例,“m”是“Date”类的 Java“Method”对象数组。然而,当我尝试在“Method”实例之一上调用 getName() 时,它不起作用。请注意,在“Date”实例上调用 getTime() 效果很好,几乎所有其他对 Java 对象的调用也是如此。 (嗯,当然,我还没有进行详尽的探索,但它通常是有效的,这就是为什么“方法”看起来很奇怪。)

如果我(在 Java 端)编写一个基本上包装“方法”和委托(delegate)的类,那么效果很好。因此,Javascript 领域和“方法”提供的内容之间并不存在某种内在的障碍。 (事实上​​,我认为脚本层本身必须首先进行反射以提供基本设施。)

我记得上次我通过 JDK 6 脚本框架使用 Rhino 时遇到过并解决了这个问题。我不记得我是否弄清楚了为什么会发生这种情况。有人知道吗?

最佳答案

IIRC,这是因为许多方法使用直接调用者进行某些安全检查。如果您使用 Method.invoke 调用这些方法,则 invoke 的调用者将被视为直接调用者。这些方法在当前 Java Secure Coding Guidelines 的第 6 节中列出。 .

关于java - 为什么 Javascript(在 Rhino 中运行)无法访问 java.lang.reflect.Method 实例上的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3186479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com