0
我有一個腳本化豆如下所示遷移犀牛腳本化豆到犀牛
package test.rhino;
import java.util.HashMap;
import org.mozilla.javascript.Scriptable;
public class SomeBean implements Scriptable {
/**
* The current values for this object.
*/
private HashMap<String, Object> values = new HashMap<>();
/**
*
*/
public SomeBean() {
System.out.println("SomeBean();");
}
/*
* @see org.mozilla.javascript.Scriptable#getClassName()
*/
@Override
public String getClassName() {
return "SomeBean";
}
/*
* @see org.mozilla.javascript.Scriptable#get(java.lang.String,
* org.mozilla.javascript.Scriptable)
*/
@Override
public Object get(String name, Scriptable start) {
System.out.println("Get is called.");
System.out.println("Called for this" + name + " and returned :" + values.get(name));
return values.get(name);
}
/*
* @see org.mozilla.javascript.Scriptable#put(java.lang.String,
* org.mozilla.javascript.Scriptable, java.lang.Object)
*/
@Override
public void put(String name, Scriptable start, Object value) {
System.out.println("Put is called. Input name: " + name + "\n Input values: " + value);
values.put(name, value);
}
@Override
public Object get(int index, Scriptable start) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean has(String name, Scriptable start) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean has(int index, Scriptable start) {
// TODO Auto-generated method stub
return false;
}
@Override
public void put(int index, Scriptable start, Object value) {
// TODO Auto-generated method stub
}
@Override
public void delete(String name) {
// TODO Auto-generated method stub
}
@Override
public void delete(int index) {
// TODO Auto-generated method stub
}
@Override
public Scriptable getPrototype() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setPrototype(Scriptable prototype) {
// TODO Auto-generated method stub
}
@Override
public Scriptable getParentScope() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setParentScope(Scriptable parent) {
// TODO Auto-generated method stub
}
@Override
public Object[] getIds() {
// TODO Auto-generated method stub
return null;
}
@Override
public Object getDefaultValue(Class<?> hint) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean hasInstance(Scriptable instance) {
// TODO Auto-generated method stub
return false;
}
}
在Rhino中,使用JavaScript我可以訪問在基礎HashMap作爲bean的屬性的密鑰。
var bean = new SomeBean();"
+ "bean.nomen = 'John Doe';\n"
+ "bean.nomen2 = bean.nomen + ' is cool';
輸出顯示被稱爲key和value的輸入和輸入是從HashMap的'values'中添加和訪問的。這樣我也可以添加額外的功能來獲取()和put()方法的定義。
將此bean移植到Nashorn時,我無法找到具有相同功能的方法。 Nashorn在JavaScript中公開了HashMap,並允許我們添加條目,但對於我來說,這種行爲應該可以通過一個通用的setter或getter從bean實例訪問,這樣我就可以在HashMap中添加和檢索值時做更多的事情。
因此,它應該像下面: -
Assume bean = new SomeBean();
bean.name = 'John Doe' // Adds name and John Doe to the HashMap
print(bean.name) // Retrieves John Doe.
有沒有辦法在犀牛做到這一點?我知道公共類變量可用於我的bean實例,但是這並不能提供與上面所示相同的功能。我不想直接訪問HashMap。
謝謝。