我正在嘗試處理來自NativeObject
的數據,但我發現了一個與對象屬性命名有關的小問題。爲對象的JavaScript代碼是:Rhino接受對象屬性的有效名稱是什麼?
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 cannot be cast to org.mozilla.javascript.NativeObject
。
如果我投到UniqueTag
我實際上可以得到正確的值,在這種情況下將是UniqueTag.NOT_FOUND
。
我覺得這有點令人困惑,因爲我從對象本身獲取屬性鍵,它實際上存在於JavaScript代碼中。
如果我將對象的名稱從「234」更改爲「car」,則代碼將按預期工作,因此我假定命名存在問題。從這post我明白,屬性名稱可以是任何類型的字符串,所以應該沒有問題與數字的字符串。
所以我想一個後續問題將是:有沒有辦法讓我解決這個問題,而不必進行重命名?
我還需要提一點,我只能訪問JavaScript代碼和Java方法。其他一切都是黑匣子。
謝謝!
這可能是解決問題的辦法。我解決這個問題的方法是在密鑰前面添加一個** $ **,從而將它變成一個字符串。我將不得不檢查您的解決方案是否也適用。 – gookman
你說得對。這是正確的解決方案。 – gookman