2013-12-13 2 views
0

В Java У меня есть метод:Оценить строку как Java код

private boolean testFunction(int x){ 

    // codes goes here.. 
} 

Теперь у меня есть выражение, записанное в файле что-то вроде:

if(testFunction(10)){ return "ok"; }else{ return null;} 

Я хранящей это в String переменной внутри java и хотите выполнить его, как он должен выполняться как код Java:

if(testFunction(10)){ return "ok"; }else{ return null;}` 

Возможно ли это, е?

Дело в том, что у меня есть веб-приложение, в котором есть еще 10 разных форм, имеющих разные типы полей, т. Е. В какой-то форме X, Y, Z есть и X, Y требуется .... в некотором роде A, B, C есть, и C требуется только так.

Поэтому вместо того, чтобы писать код проверки для каждой формы, я хотел написать выражение в файле XML, и в момент оценки это выражение будет выполняться с помощью одного метода java и вернуть некоторое значение. Таким образом, я просто должен написать выражение в файле XML.

+0

Sure. Почти все возможно. Java не имеет функции 'eval()', поэтому вам придется написать ее. Это не будет тривиальной задачей. –

+1

ваш метод 'testFunction()' требует типа возврата 'boolean', почему вы возвращаете 'ok'/null? – Baby

+1

'@Rafa El' return 'ok'/null из' testFunction() 'и где-то в коде – manish

ответ

0

Нет. Java - это скомпилированный язык, он не интерпретируется.

Есть способы генерации байт-кода динамически в Java, но они весьма активное участие, и не где-нибудь близко к понятию eval(String code)

+0

Так какие возможные решения? – manish

+0

Скорее всего, решение проблемы у вас есть * не * "динамически компилировать и оценивать произвольный код Java." Скажите нам, что такое настоящая проблема, и, скорее всего, мы сможем предоставить вам более чистый ответ. – torquestomp

+0

Очевидно, что это возможно ... –

-1

Если вы ищете что-то вроде

public class Test { 

    public static void main(String[] args) { 
     Test test = new Test(); 
     System.out.println(test.getReturnValue(10)); 
     System.out.println(test.getReturnValue(11)); 
    } 

    private boolean testFunction(int x){ 
     if(x == 10) 
      return true; 
     else 
      return false; 
    } 

    private Object getReturnValue(int x){ 
     if(testFunction(x)){ 
      return "ok"; 
     }else{ 
      return null; 
     } 
    } 
} 
0

Если вы хотите динамическую проверку для записей в форме, я бы предложил использовать выражения RegExp, которые можно оценить и сопоставить с вводом формы во время выполнения.

К сожалению, ваш ОП был немного расплывчатым относительно того, чего вы на самом деле пытаетесь достичь.

Для начала: RegExp Pattern class

Смежные вопросы