使用ScriptEngine 通過實體類和計算公式 計算結果

使用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) {
		}
        
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章