Я использую Jexl lib из apache и у меня есть некоторые проблемы с использованием evaluate()
метода класса Expression. Вот код класса NelderMead:
import org.apache.commons.jexl2.*;
public class NelderMead {
// контсанты
private static int M = 3;
private static double E = 0.005;
private static double A = 1.000;
private static double B = 0.500;
private static double Y = 2.000;
// переменные
private JexlEngine jexl;
private Expression func;
private String funcString = "";
private MapContext[] iterations;
public NelderMead(){
this.jexl = new JexlEngine();
}
public NelderMead(String funcString){
this.jexl = new JexlEngine();
this.setFunc(funcString);
}
public void setFunc(String funcString){
this.funcString = funcString;
this.func = this.jexl.createExpression(funcString);
}
public double funcEval(MapContext args){
return ((Double) this.func.evaluate(args)).doubleValue();
}
public boolean checkCriterian(){
return true;
}
}
И код теста:
import org.apache.commons.jexl2.MapContext;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
NelderMead nm = new NelderMead("(x1-2)^4+(x1-2*x2)^2");
MapContext mc = new MapContext();
mc.set("x1", 2);
mc.set("x2", 1);
System.out.println(nm.funcEval(mc));
}
}
И когда я запускаю тестовый сценарий, он вызывает следующую ошибку:
Exception in thread "main" java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Double
at NelderMead.funcEval(NelderMead.java:33)
at Test.main(Test.java:14)
Я не могу понять, почему он не может разыграть Double?
PS
Здесь - это функция javadoc для вычисления ().