123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- package com.jfireel.expression.node;
- public interface MethodNode extends CalculateNode {
- enum ConvertType {
- INT, LONG, SHORT, FLOAT, DOUBLE, BYTE, BOOLEAN, CHARACTER, OTHER
- }
- void setArgsNodes(CalculateNode[] argsNodes);
- public static class MethodNodeUtil {
- public static final void convertArgs(Object[] args, ConvertType[] convertTypes) {
- for (int i = 0; i < args.length; i++) {
- Object argeValue = args[i];
- switch (convertTypes[i]) {
- case INT:
- if (!(argeValue instanceof Integer)) {
- args[i] = ((Number) argeValue).intValue();
- }
- break;
- case LONG:
- if (!(argeValue instanceof Long)) {
- args[i] = ((Number) argeValue).longValue();
- }
- break;
- case SHORT:
- if (!(argeValue instanceof Short)) {
- args[i] = ((Number) argeValue).shortValue();
- }
- break;
- case FLOAT:
- if (!(argeValue instanceof Float)) {
- args[i] = ((Number) argeValue).floatValue();
- }
- break;
- case DOUBLE:
- if (!(argeValue instanceof Double)) {
- args[i] = ((Number) argeValue).doubleValue();
- }
- break;
- case BYTE:
- if (!(argeValue instanceof Byte)) {
- args[i] = ((Number) argeValue).byteValue();
- }
- break;
- case CHARACTER:
- case BOOLEAN:
- case OTHER:
- // 以上三种不用转化
- break;
- default:
- break;
- }
- }
- }
- public static final ConvertType[] buildConvertTypes(Class<?>[] parameterTypes) {
- ConvertType[] convertTypes = new ConvertType[parameterTypes.length];
- for (int i = 0; i < parameterTypes.length; i++) {
- if (parameterTypes[i] == int.class || parameterTypes[i] == Integer.class) {
- convertTypes[i] = ConvertType.INT;
- } else if (parameterTypes[i] == short.class || parameterTypes[i] == short.class) {
- convertTypes[i] = ConvertType.SHORT;
- } else if (parameterTypes[i] == long.class || parameterTypes[i] == Long.class) {
- convertTypes[i] = ConvertType.LONG;
- } else if (parameterTypes[i] == float.class || parameterTypes[i] == Float.class) {
- convertTypes[i] = ConvertType.FLOAT;
- } else if (parameterTypes[i] == double.class || parameterTypes[i] == Double.class) {
- convertTypes[i] = ConvertType.DOUBLE;
- } else if (parameterTypes[i] == byte.class || parameterTypes[i] == Byte.class) {
- convertTypes[i] = ConvertType.BYTE;
- } else if (parameterTypes[i] == boolean.class || parameterTypes[i] == Boolean.class) {
- convertTypes[i] = ConvertType.BOOLEAN;
- } else {
- convertTypes[i] = ConvertType.OTHER;
- }
- }
- return convertTypes;
- }
- public static final boolean isWrapType(Class<?> primitiveType, Class<?> arge) {
- if (primitiveType == int.class) {
- return arge == Integer.class || arge == Long.class;
- } else if (primitiveType == short.class) {
- return arge == Integer.class || arge == Long.class;
- } else if (primitiveType == long.class) {
- return arge == Integer.class || arge == Long.class;
- } else if (primitiveType == boolean.class) {
- return arge == Boolean.class;
- } else if (primitiveType == float.class) {
- return arge == Float.class || arge == Double.class;
- } else if (primitiveType == double.class) {
- return arge == Float.class || arge == Double.class;
- } else if (primitiveType == char.class) {
- return arge == Character.class;
- } else if (primitiveType == byte.class) {
- return arge == Integer.class || arge == Long.class;
- } else {
- return false;
- }
- }
- }
- }
|