Легко сделать с 2-мя возможными ответами
Поскольку SimpleContext
позволяет вам делать арифметические вычисления (в моем случае), я просто помещаю вычисления здесь.Я также использую ValueExpression
(не в нужном месте, я думаю), чтобы предоставить мне сопоставленное значение от SimpleContext
.Итак, вот что у меня есть
context.setVariable("fii", factory.createValueExpression(new BigDecimal(3), BigDecimal.class));
context.setVariable("fee", factory.createValueExpression(new BigDecimal(5), BigDecimal.class));
ValueExpression e1 = factory.createValueExpression(context, "${fee}", BigDecimal.class);
ValueExpression e2 = factory.createValueExpression(context, "${fii}", BigDecimal.class);
String temp1 = (String)e1.getValue(context).toString();
String temp2 = (String)e2.getValue(context).toString();
context.setVariable("foo", factory.createValueExpression(new BigDecimal(temp1).add(new BigDecimal(temp2)), BigDecimal.class));
ValueExpression e = factory.createValueExpression(context, "${foo}", BigDecimal.class);// will return 8
Но еще раз я не знаю, правильно это или нет, поэтому я придумал второй
Создайте класс, создайте несколько статических методов, которые требуют 2 параметра, и вот оно.Скажем, этот класс с именем Operate
public static BigDecimal add (BigDecimal val1, BigDecimal val2){
return val1.add(val2);
}
public static BigDecimal subtract (BigDecimal val1, BigDecimal val2){
return val1.subtract(val2);
}
Затем я называю его так:
context.setFunction("meh", "max", Operate.class.getMethod("add", BigDecimal.class, BigDecimal.class));
ValueExpression e = factory.createValueExpression(context, "${meh:max(fii,fee)}", BigDecimal.class);// also return 8
Я предпочитаю использовать второй, надеюсь, это будет полезно