使用ScriptEngine 通過實體類和計算公式 計算結果
其中有用到 ScriptEngine JSONObject hashMap iterator
public class Contents{
private Integer score1;
private Integer score2;
private Integer score3;
public Integer getScore1() {
return score1;
}
public void setScore1(Integer score1) {
this.score1 = score1;
}
public Integer getScore2() {
return score2;
}
public void setScore2(Integer score2) {
this.score2 = score2;
}
public Integer getScore3() {
return score3;
}
public void setScore3(Integer score3) {
this.score3 = score3;
}
}
@Test
public void test(){
//規則
String rule="score1+score2";
//計算參數
String[] params={"score1","score2"};
//實體類
Contents contents=new Contents();
contents.setScore1(1);
contents.setScore2(2);
contents.setScore3(3);
//對象轉json
JSONObject jsonObj = JSONObject.fromObject(contents);
//
//ScriptEngineManager manager = new ScriptEngineManager();
//通過文件擴展名獲取腳本引擎
ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
//將參數和實體類中的值 封裝到hash中
Map<String,Object> paramValues = new HashMap<String,Object>();
for(String param:params){
paramValues.put(param,JsonUtils.getParamValue(jsonObj,param));
}
//將hash轉成集合 便於循環遍歷
Iterator<String> keys=paramValues.keySet().iterator();
//將key和value 封裝到腳本引擎中
while(keys.hasNext()){
String key = keys.next();
if(engine.get(key)==null){
engine.put(key, paramValues.get(key));
}
}
//腳本引擎通過rule的計算公式 計算結果
try {
Object calcValue = engine.eval(rule);
} catch (ScriptException e) {
}
}