当前位置: 首页 > 后端技术 > Java

MVEL自定义函数重复使用报错:duplicatefunction

时间:2023-04-01 23:20:13 Java

MVEL自定义表达式重复使用报错:duplicatefunction原因:函数第一次调用时会缓存,第二次调用时会提示该函数定义函数名,不要与参数名相同示例代码:@RunWith(SpringRunner.class)@SpringBootTestpublicclassMvelTest{@TestpublicvoidevalTest(){//表达式Stringroundup="defroundup(num){roundnum=null;if(num!=null){introundnum=Math.round(num);}returnroundnum;}";VariableResolverFactoryfunctionFactory=newMapVariableResolverFactory();MVEL.eval(综述,functionFactory);VariableResolverFactoryresolverFactory=newMapVariableResolverFactory()resolverFactory.setNextFactory(functionFactory);Mapmap=newHashMap();map.put("A",newBigDecimal(2.33));map.put("B",newBigDecimal(4));Stringexp="综合(A*B)";System.out.println(MVEL.eval(exp,map,resolverFactory));系统。out.println("------------");VariableResolverFactoryresolverFactory2=newMapVariableResolverFactory();resolverFactory2.setNextFactory(functionFactory);Mapmap2=newHashMap();map2.put("A",newBigDecimal(3.33));map2.put("B",newBigDecimal(2));System.out.println(MVEL.eval(exp,map2,resolverFactory2));}}错误代码示例添加roundup函数到缓存中第一次执行成功再次调用再次将roundup函数添加到缓存中VariableResolverFactory有函数抛出异常