public class Coercions extends Object
This class contains the logic for coercing data types before operators are applied to them.
The following is the list of rules applied for various type conversions.
Applying arithmetic operator Binary operator - A {+,-,*} B if A and B are null return 0 if A or B is Float, Double, or String containing ".", "e", or "E" coerce both A and B to Double apply operator otherwise coerce both A and B to Long apply operator if operator results in exception (such as divide by 0), error Binary operator - A {/,div} B if A and B are null return 0 otherwise coerce both A and B to Double apply operator if operator results in exception (such as divide by 0), error Binary operator - A {%,mod} B if A and B are null return 0 if A or B is Float, Double, or String containing ".", "e" or "E" coerce both to Double apply operator otherwise coerce both A and B to Long apply operator if operator results in exception (such as divide by 0), error Unary minus operator - -A if A is null return 0 if A is String if A contains ".", "e", or "E" coerce to Double, apply operator otherwise coerce to a Long and apply operator if A is Byte,Short,Integer,Long,Float,Double retain type, apply operator if operator results in exception, error otherwise error Applying "empty" operator - empty A if A is null return true if A is zero-length String return true if A is zero-length array return true if A is List and ((List) A).isEmpty() return true if A is Map and ((Map) A).isEmpty() return true otherwise return false Applying logical operators Binary operator - A {and,or} B coerce both A and B to Boolean, apply operator NOTE - operator stops as soon as expression can be determined, i.e., A and B and C and D - if B is false, then only A and B is evaluated Unary not operator - not A coerce A to Boolean, apply operator Applying relational operator A {<,>,<=,>=,lt,gt,lte,gte} B if A==B if operator is >= or <= return true otherwise return false if A or B is null return false if A or B is Float or Double coerce both A and B to Double apply operator if A or B is Byte,Short,Character,Integer,Long coerce both A and B to Long apply operator if A or B is String coerce both A and B to String, compare lexically if A is Comparable if A.compareTo (B) throws exception error otherwise use result of A.compareTo(B) if B is Comparable if B.compareTo (A) throws exception error otherwise use result of B.compareTo(A) otherwise error Applying equality operator A {==,!=} B if A==B apply operator if A or B is null return false for ==, true for != if A or B is Float or Double coerce both A and B to Double apply operator if A or B is Byte,Short,Character,Integer,Long coerce both A and B to Long apply operator if A or B is Boolean coerce both A and B to Boolean apply operator if A or B is String coerce both A and B to String, compare lexically otherwise if an error occurs while calling A.equals(B) error apply operator to result of A.equals(B) coercions coerce A to String A is String return A A is null return "" A.toString throws exception error otherwise return A.toString coerce A to primitive Number type N A is null or "" return 0 A is Character convert to short, apply following rules A is Boolean error A is Number type N return A A is Number with less precision than N coerce quietly A is Number with greater precision than N coerce quietly A is String new N.valueOf(A) throws exception error return N.valueOf(A) otherwise error coerce A to Character should be A is null or "" return (char) 0 A is Character return A A is Boolean error A is Number with less precision than short coerce quietly - return (char) A A is Number with greater precision than short coerce quietly - return (char) A A is String return A.charAt (0) otherwise error coerce A to Boolean A is null or "" return false A is Boolean return A A is String Boolean.valueOf(A) throws exception error return Boolean.valueOf(A) otherwise error coerce A to any other type T A is null return null A is assignable to T coerce quietly A is String T has no PropertyEditor if A is "", return null otherwise error T's PropertyEditor throws exception if A is "", return null otherwise error otherwise apply T's PropertyEditor otherwise error
Constructor and Description |
---|
Coercions() |
Modifier and Type | Method and Description |
---|---|
static Object |
applyArithmeticOperator(Object pLeft,
Object pRight,
ArithmeticOperator pOperator,
Logger pLogger)
Performs all of the necessary type conversions, then calls on the
appropriate operator.
|
static Object |
applyEqualityOperator(Object pLeft,
Object pRight,
EqualityOperator pOperator,
Logger pLogger)
Performs all of the necessary type conversions, then calls on the
appropriate operator.
|
static Object |
applyRelationalOperator(Object pLeft,
Object pRight,
RelationalOperator pOperator,
Logger pLogger)
Performs all of the necessary type conversions, then calls on the
appropriate operator.
|
static Object |
coerce(Object pValue,
Class pClass,
Logger pLogger)
Coerces the given value to the specified class.
|
static Boolean |
coerceToBoolean(Object pValue,
Logger pLogger)
Coerces a value to a Boolean
|
static Character |
coerceToCharacter(Object pValue,
Logger pLogger)
Coerces a value to a Character
|
static Integer |
coerceToInteger(Object pValue,
Logger pLogger)
Coerces a value to an Integer, returning null if the coercion
isn't possible.
|
static Object |
coerceToObject(Object pValue,
Class pClass,
Logger pLogger)
Coerces a value to the specified Class that is not covered by any
of the above cases
|
static Number |
coerceToPrimitiveNumber(Object pValue,
Class pClass,
Logger pLogger)
Coerces a value to the given primitive number class
|
static String |
coerceToString(Object pValue,
Logger pLogger)
Coerces the specified value to a String
|
static boolean |
isFloatingPointString(Object pObject)
Returns true if the given string might contain a floating point
number - i.e., it contains ".", "e", or "E"
|
static boolean |
isFloatingPointType(Class pClass)
Returns true if the given class is of a floating point type
|
static boolean |
isFloatingPointType(Object pObject)
Returns true if the given Object is of a floating point type
|
static boolean |
isIntegerType(Class pClass)
Returns true if the given class is of an integer type
|
static boolean |
isIntegerType(Object pObject)
Returns true if the given Object is of an integer type
|
public static Object coerce(Object pValue, Class pClass, Logger pLogger) throws ELException
ELException
public static String coerceToString(Object pValue, Logger pLogger) throws ELException
ELException
public static Number coerceToPrimitiveNumber(Object pValue, Class pClass, Logger pLogger) throws ELException
ELException
public static Integer coerceToInteger(Object pValue, Logger pLogger) throws ELException
ELException
public static Character coerceToCharacter(Object pValue, Logger pLogger) throws ELException
ELException
public static Boolean coerceToBoolean(Object pValue, Logger pLogger) throws ELException
ELException
public static Object coerceToObject(Object pValue, Class pClass, Logger pLogger) throws ELException
ELException
public static Object applyArithmeticOperator(Object pLeft, Object pRight, ArithmeticOperator pOperator, Logger pLogger) throws ELException
ELException
public static Object applyRelationalOperator(Object pLeft, Object pRight, RelationalOperator pOperator, Logger pLogger) throws ELException
ELException
public static Object applyEqualityOperator(Object pLeft, Object pRight, EqualityOperator pOperator, Logger pLogger) throws ELException
ELException
public static boolean isFloatingPointType(Object pObject)
public static boolean isFloatingPointType(Class pClass)
public static boolean isFloatingPointString(Object pObject)
public static boolean isIntegerType(Object pObject)
public static boolean isIntegerType(Class pClass)
Copyright © 2016 JBoss by Red Hat. All rights reserved.