public class ExpressionEvaluator extends ScriptEvaluator implements IExpressionEvaluator
IExpressionEvaluator is implemented by creating and compiling a temporary compilation unit defining one
class with one static method with one RETURN statement.
A number of "convenience constructors" exist that execute the set-up steps described for IExpressionEvaluator instantly.
If the parameter and return types of the expression are known at compile time, then a "fast" expression evaluator
can be instantiated through ScriptEvaluator.createFastEvaluator(String, Class, String[]). Expression evaluation is faster
than through ScriptEvaluator.evaluate(Object[]), because it is not done through reflection but through direct method
invocation.
Example:
public interface Foo {
int bar(int a, int b);
}
...
Foo f = (Foo) ExpressionEvaluator.createFastExpressionEvaluator(
"a + b", // expression to evaluate
Foo.class, // interface that describes the expression's signature
new String[] { "a", "b" }, // the parameters' names
(ClassLoader) null // Use current thread's context class loader
);
System.out.println("1 + 2 = " + f.bar(1, 2)); // Evaluate the expression
Notice: The interfaceToImplement must either be declared public, or with package scope in the root package (i.e. "no" package).
On my system (Intel P4, 2 GHz, MS Windows XP, JDK 1.4.1), expression "x + 1" evaluates as follows:
| Server JVM | Client JVM | |
|---|---|---|
| Normal EE | 23.7 ns | 64.0 ns |
| Fast EE | 31.2 ns | 42.2 ns |
(How can it be that interface method invocation is slower than reflection for the server JVM?)
optionalOverrideMethod, optionalStaticMethodANY_TYPEDEFAULT_CLASS_NAMEBOOT_CLASS_LOADER| Constructor and Description |
|---|
ExpressionEvaluator() |
ExpressionEvaluator(String expression,
Class<?> expressionType,
String[] parameterNames,
Class<?>[] parameterTypes)
Equivalent to
ExpressionEvaluator ee = new ExpressionEvaluator();
ee.setExpressionType(expressionType);
ee.setParameters(parameterNames, parameterTypes);
ee.cook(expression);
|
ExpressionEvaluator(String expression,
Class<?> expressionType,
String[] parameterNames,
Class<?>[] parameterTypes,
Class<?>[] thrownExceptions,
Class<?> optionalExtendedType,
Class<?>[] implementedTypes,
ClassLoader optionalParentClassLoader)
Equivalent to
ExpressionEvaluator ee = new ExpressionEvaluator();
ee.setExpressionType(expressionType);
ee.setParameters(parameterNames, parameterTypes);
ee.setThrownExceptions(thrownExceptions);
ee.setExtendedType(optionalExtendedType);
ee.setImplementedTypes(implementedTypes);
ee.setParentClassLoader(optionalParentClassLoader);
ee.cook(expression);
|
ExpressionEvaluator(String expression,
Class<?> expressionType,
String[] parameterNames,
Class<?>[] parameterTypes,
Class<?>[] thrownExceptions,
ClassLoader optionalParentClassLoader)
Equivalent to
ExpressionEvaluator ee = new ExpressionEvaluator();
ee.setExpressionType(expressionType);
ee.setParameters(parameterNames, parameterTypes);
ee.setThrownExceptions(thrownExceptions);
ee.setParentClassLoader(optionalParentClassLoader);
ee.cook(expression);
|
| Modifier and Type | Method and Description |
|---|---|
void |
cook(String[] optionalFileNames,
Reader[] readers) |
protected Class<?> |
getDefaultReturnType()
The default return type of an expression is
Object.class. |
void |
setExpressionType(Class<?> expressionType) |
void |
setExpressionTypes(Class<?>[] expressionTypes) |
void |
setReturnType(Class<?> expressionType)
Deprecated.
Must not be used on an
IExpressionEvaluator; use setExpressionType(Class) instead |
void |
setReturnTypes(Class<?>[] expressionTypes)
Deprecated.
Must not be used on an
IExpressionEvaluator; use setExpressionTypes(Class[])
instead |
cook, cook, cook, cook, cook, createFastEvaluator, createFastEvaluator, createInstance, evaluate, evaluate, getMethod, getMethod, getMethods, getReturnType, setMethodName, setMethodNames, setOverrideMethod, setOverrideMethod, setParameters, setParameters, setStaticMethod, setStaticMethod, setThrownExceptions, setThrownExceptionscook, getClazz, newFileName, parseImportDeclarations, setClassName, setDefaultImports, setExtendedClass, setExtendedType, setImplementedInterfaces, setImplementedTypesaddOffset, getClassLoader, setCompileErrorHandler, setDebuggingInformation, setNoPermissions, setParentClassLoader, setParentClassLoader, setPermissions, setWarningHandlercook, cook, cook, cook, cook, cook, cook, cookFile, cookFile, cookFile, cookFile, readStringclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitcreateFastEvaluator, createFastEvaluator, evaluatecook, cook, cook, evaluate, getMethod, getMethod, setMethodName, setMethodNames, setOverrideMethod, setOverrideMethod, setParameters, setParameters, setStaticMethod, setStaticMethod, setThrownExceptions, setThrownExceptionscreateInstance, getClazz, setClassName, setDefaultImports, setExtendedClass, setExtendedType, setImplementedInterfaces, setImplementedTypesgetClassLoader, setNoPermissions, setPermissionscook, cook, cook, cook, cook, cook, cook, cook, cookFile, cookFile, cookFile, cookFile, setCompileErrorHandler, setDebuggingInformation, setParentClassLoader, setWarningHandlerpublic ExpressionEvaluator(String expression, Class<?> expressionType, String[] parameterNames, Class<?>[] parameterTypes) throws CompileException
ExpressionEvaluator ee = new ExpressionEvaluator();
ee.setExpressionType(expressionType);
ee.setParameters(parameterNames, parameterTypes);
ee.cook(expression);
public ExpressionEvaluator(String expression, Class<?> expressionType, String[] parameterNames, Class<?>[] parameterTypes, Class<?>[] thrownExceptions, @Nullable ClassLoader optionalParentClassLoader) throws CompileException
ExpressionEvaluator ee = new ExpressionEvaluator();
ee.setExpressionType(expressionType);
ee.setParameters(parameterNames, parameterTypes);
ee.setThrownExceptions(thrownExceptions);
ee.setParentClassLoader(optionalParentClassLoader);
ee.cook(expression);
public ExpressionEvaluator(String expression, Class<?> expressionType, String[] parameterNames, Class<?>[] parameterTypes, Class<?>[] thrownExceptions, @Nullable Class<?> optionalExtendedType, Class<?>[] implementedTypes, @Nullable ClassLoader optionalParentClassLoader) throws CompileException
ExpressionEvaluator ee = new ExpressionEvaluator();
ee.setExpressionType(expressionType);
ee.setParameters(parameterNames, parameterTypes);
ee.setThrownExceptions(thrownExceptions);
ee.setExtendedType(optionalExtendedType);
ee.setImplementedTypes(implementedTypes);
ee.setParentClassLoader(optionalParentClassLoader);
ee.cook(expression);
CompileExceptionExpressionEvaluator(),
setExpressionType(Class),
ScriptEvaluator.setParameters(String[], Class[]),
ScriptEvaluator.setThrownExceptions(Class[]),
ClassBodyEvaluator.setExtendedClass(Class),
ClassBodyEvaluator.setImplementedInterfaces(Class[]),
SimpleCompiler.setParentClassLoader(ClassLoader),
Cookable.cook(String)public ExpressionEvaluator()
@Deprecated public void setReturnType(Class<?> expressionType)
IExpressionEvaluator; use setExpressionType(Class) insteadsetReturnType in interface IExpressionEvaluatorsetReturnType in interface IScriptEvaluatorsetReturnType in class ScriptEvaluator@Deprecated public void setReturnTypes(Class<?>[] expressionTypes)
IExpressionEvaluator; use setExpressionTypes(Class[])
insteadsetReturnTypes in interface IExpressionEvaluatorsetReturnTypes in interface IScriptEvaluatorsetReturnTypes in class ScriptEvaluatorpublic void setExpressionType(Class<?> expressionType)
setExpressionType in interface IExpressionEvaluatorpublic void setExpressionTypes(Class<?>[] expressionTypes)
setExpressionTypes in interface IExpressionEvaluatorprotected Class<?> getDefaultReturnType()
Object.class.getDefaultReturnType in class ScriptEvaluatorpublic void cook(@Nullable String[] optionalFileNames, Reader[] readers) throws CompileException, IOException
cook in interface IScriptEvaluatorcook in class ScriptEvaluatorCompileExceptionIOExceptionCopyright © 2019. All rights reserved.