gpt4 book ai didi

java - Rhino 接受什么作为对象属性的有效名称?

转载 作者:行者123 更新时间:2023-11-28 09:12:55 24 4
gpt4 key购买 nike

我正在尝试处理来自 NativeObject 的数据,但我发现对象属性的命名存在一个小问题。该对象的 JavaScript 代码是:

var mainObject = {
"innerObject" : {
"234" : {
"property1" : "1",
"property2" : "2"
}
}
}

我在Java中处理它的方法如下所示:

public void processNative(NativeObject obj) {

if(NativeObject.hasProperty(obj, "innerObject")) {
NativeObject no = (NativeObject)NativeObject.getProperty(obj, "innerObject");
Object[] propIds = NativeObject.getPropertyIds(no);
for (int i = 0; i < propIds.length; i++) {
String key = propIds[i].toString();
NativeObject numObj = (NativeObject)NativeObject.getProperty(no, key);
//do more processing here
}
}
}

此代码将抛出此异常:java.lang.ClassCastException:org.mozilla.javascript.UniqueTag 无法转换为 org.mozilla.javascript.NativeObject

如果我转换为 UniqueTag,我实际上可以获得正确的值,在本例中将为 UniqueTag.NOT_FOUND

我发现这有点令人困惑,因为我从对象本身获取属性键,而它实际上存在于 JavaScript 代码中。

如果我将对象的名称从“234”更改为“car”,代码将按预期工作,因此我假设命名存在问题。从这里post我知道属性名称可以是任何类型的字符串,因此由数字组成的字符串应该没有问题。

所以我想后续问题是:有没有办法让我无需重命名即可解决此问题?

我还需要提及的一件事是我只能访问 JavaScript 代码和 Java 方法。其他一切都是黑匣子。

谢谢!

最佳答案

我在 Scala 中也遇到了这个问题。 NativeObject 支持 2 个 get 方法 get(int, Scritable) 和 get(string, Scriptable)。因此,如果属性键是数字字符串,我会将其转换为 int 并使用 get(int, yourObject)

http://www.jarvana.com/jarvana/view/org/mozilla/rhino/1.7R3/rhino-1.7R3-javadoc.jar!/org/mozilla/javascript/ScriptableObject.html#get%28int,%20org.mozilla.javascript.Scriptable%29

关于java - Rhino 接受什么作为对象属性的有效名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16079433/

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