MethodNode.java 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package com.jfireel.expression.node;
  2. public interface MethodNode extends CalculateNode {
  3. enum ConvertType {
  4. INT, LONG, SHORT, FLOAT, DOUBLE, BYTE, BOOLEAN, CHARACTER, OTHER
  5. }
  6. void setArgsNodes(CalculateNode[] argsNodes);
  7. public static class MethodNodeUtil {
  8. public static final void convertArgs(Object[] args, ConvertType[] convertTypes) {
  9. for (int i = 0; i < args.length; i++) {
  10. Object argeValue = args[i];
  11. switch (convertTypes[i]) {
  12. case INT:
  13. if (!(argeValue instanceof Integer)) {
  14. args[i] = ((Number) argeValue).intValue();
  15. }
  16. break;
  17. case LONG:
  18. if (!(argeValue instanceof Long)) {
  19. args[i] = ((Number) argeValue).longValue();
  20. }
  21. break;
  22. case SHORT:
  23. if (!(argeValue instanceof Short)) {
  24. args[i] = ((Number) argeValue).shortValue();
  25. }
  26. break;
  27. case FLOAT:
  28. if (!(argeValue instanceof Float)) {
  29. args[i] = ((Number) argeValue).floatValue();
  30. }
  31. break;
  32. case DOUBLE:
  33. if (!(argeValue instanceof Double)) {
  34. args[i] = ((Number) argeValue).doubleValue();
  35. }
  36. break;
  37. case BYTE:
  38. if (!(argeValue instanceof Byte)) {
  39. args[i] = ((Number) argeValue).byteValue();
  40. }
  41. break;
  42. case CHARACTER:
  43. case BOOLEAN:
  44. case OTHER:
  45. // 以上三种不用转化
  46. break;
  47. default:
  48. break;
  49. }
  50. }
  51. }
  52. public static final ConvertType[] buildConvertTypes(Class<?>[] parameterTypes) {
  53. ConvertType[] convertTypes = new ConvertType[parameterTypes.length];
  54. for (int i = 0; i < parameterTypes.length; i++) {
  55. if (parameterTypes[i] == int.class || parameterTypes[i] == Integer.class) {
  56. convertTypes[i] = ConvertType.INT;
  57. } else if (parameterTypes[i] == short.class || parameterTypes[i] == short.class) {
  58. convertTypes[i] = ConvertType.SHORT;
  59. } else if (parameterTypes[i] == long.class || parameterTypes[i] == Long.class) {
  60. convertTypes[i] = ConvertType.LONG;
  61. } else if (parameterTypes[i] == float.class || parameterTypes[i] == Float.class) {
  62. convertTypes[i] = ConvertType.FLOAT;
  63. } else if (parameterTypes[i] == double.class || parameterTypes[i] == Double.class) {
  64. convertTypes[i] = ConvertType.DOUBLE;
  65. } else if (parameterTypes[i] == byte.class || parameterTypes[i] == Byte.class) {
  66. convertTypes[i] = ConvertType.BYTE;
  67. } else if (parameterTypes[i] == boolean.class || parameterTypes[i] == Boolean.class) {
  68. convertTypes[i] = ConvertType.BOOLEAN;
  69. } else {
  70. convertTypes[i] = ConvertType.OTHER;
  71. }
  72. }
  73. return convertTypes;
  74. }
  75. public static final boolean isWrapType(Class<?> primitiveType, Class<?> arge) {
  76. if (primitiveType == int.class) {
  77. return arge == Integer.class || arge == Long.class;
  78. } else if (primitiveType == short.class) {
  79. return arge == Integer.class || arge == Long.class;
  80. } else if (primitiveType == long.class) {
  81. return arge == Integer.class || arge == Long.class;
  82. } else if (primitiveType == boolean.class) {
  83. return arge == Boolean.class;
  84. } else if (primitiveType == float.class) {
  85. return arge == Float.class || arge == Double.class;
  86. } else if (primitiveType == double.class) {
  87. return arge == Float.class || arge == Double.class;
  88. } else if (primitiveType == char.class) {
  89. return arge == Character.class;
  90. } else if (primitiveType == byte.class) {
  91. return arge == Integer.class || arge == Long.class;
  92. } else {
  93. return false;
  94. }
  95. }
  96. }
  97. }