boxesruntime.java
来自「JAVA 语言的函数式编程扩展」· Java 代码 · 共 846 行 · 第 1/3 页
JAVA
846 行
} if (maxcode <= DOUBLE) { double val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).doubleValue(); double val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).doubleValue(); return boxToDouble(val1 + val2); } throw new NoSuchMethodException(); } /** arg1 - arg2 */ public static Object subtract(Object arg1, Object arg2) throws NoSuchMethodException { int code1 = typeCode(arg1); int code2 = typeCode(arg2); int maxcode = (code1 < code2) ? code2 : code1; if (maxcode <= INT) { int val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).intValue(); int val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).intValue(); return boxToInteger(val1 - val2); } if (maxcode <= LONG) { long val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).longValue(); long val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).longValue(); return boxToLong(val1 - val2); } if (maxcode <= FLOAT) { float val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).floatValue(); float val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).floatValue(); return boxToFloat(val1 - val2); } if (maxcode <= DOUBLE) { double val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).doubleValue(); double val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).doubleValue(); return boxToDouble(val1 - val2); } throw new NoSuchMethodException(); } /** arg1 * arg2 */ public static Object multiply(Object arg1, Object arg2) throws NoSuchMethodException { int code1 = typeCode(arg1); int code2 = typeCode(arg2); int maxcode = (code1 < code2) ? code2 : code1; if (maxcode <= INT) { int val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).intValue(); int val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).intValue(); return boxToInteger(val1 * val2); } if (maxcode <= LONG) { long val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).longValue(); long val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).longValue(); return boxToLong(val1 * val2); } if (maxcode <= FLOAT) { float val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).floatValue(); float val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).floatValue(); return boxToFloat(val1 * val2); } if (maxcode <= DOUBLE) { double val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).doubleValue(); double val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).doubleValue(); return boxToDouble(val1 * val2); } throw new NoSuchMethodException(); } /** arg1 / arg2 */ public static Object divide(Object arg1, Object arg2) throws NoSuchMethodException { int code1 = typeCode(arg1); int code2 = typeCode(arg2); int maxcode = (code1 < code2) ? code2 : code1; if (maxcode <= INT) { int val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).intValue(); int val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).intValue(); return boxToInteger(val1 / val2); } if (maxcode <= LONG) { long val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).longValue(); long val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).longValue(); return boxToLong(val1 / val2); } if (maxcode <= FLOAT) { float val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).floatValue(); float val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).floatValue(); return boxToFloat(val1 / val2); } if (maxcode <= DOUBLE) { double val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).doubleValue(); double val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).doubleValue(); return boxToDouble(val1 / val2); } throw new NoSuchMethodException(); } /** arg1 % arg2 */ public static Object takeModulo(Object arg1, Object arg2) throws NoSuchMethodException { int code1 = typeCode(arg1); int code2 = typeCode(arg2); int maxcode = (code1 < code2) ? code2 : code1; if (maxcode <= INT) { int val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).intValue(); int val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).intValue(); return boxToInteger(val1 % val2); } if (maxcode <= LONG) { long val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).longValue(); long val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).longValue(); return boxToLong(val1 % val2); } if (maxcode <= FLOAT) { float val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).floatValue(); float val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).floatValue(); return boxToFloat(val1 % val2); } if (maxcode <= DOUBLE) { double val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).doubleValue(); double val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).doubleValue(); return boxToDouble(val1 % val2); } throw new NoSuchMethodException(); } /** arg1 >> arg2 */ public static Object shiftSignedRight(Object arg1, Object arg2) throws NoSuchMethodException { int code1 = typeCode(arg1); int code2 = typeCode(arg2); if (code1 <= INT) { int val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).intValue(); if (code2 <= INT) { int val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).intValue(); return boxToInteger(val1 >> val2); } if (code2 <= LONG) { long val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).longValue(); return boxToInteger(val1 >> val2); } } if (code1 <= LONG) { long val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).longValue(); if (code2 <= INT) { int val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).intValue(); return boxToLong(val1 >> val2); } if (code2 <= LONG) { long val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).longValue(); return boxToLong(val1 >> val2); } } throw new NoSuchMethodException(); } /** arg1 << arg2 */ public static Object shiftSignedLeft(Object arg1, Object arg2) throws NoSuchMethodException { int code1 = typeCode(arg1); int code2 = typeCode(arg2); if (code1 <= INT) { int val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).intValue(); if (code2 <= INT) { int val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).intValue(); return boxToInteger(val1 << val2); } if (code2 <= LONG) { long val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).longValue(); return boxToInteger(val1 << val2); } } if (code1 <= LONG) { long val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).longValue(); if (code2 <= INT) { int val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).intValue(); return boxToLong(val1 << val2); } if (code2 <= LONG) { long val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).longValue(); return boxToLong(val1 << val2); } } throw new NoSuchMethodException(); } /** arg1 >>> arg2 */ public static Object shiftLogicalRight(Object arg1, Object arg2) throws NoSuchMethodException { int code1 = typeCode(arg1); int code2 = typeCode(arg2); if (code1 <= INT) { int val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).intValue(); if (code2 <= INT) { int val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).intValue(); return boxToInteger(val1 >>> val2); } if (code2 <= LONG) { long val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).longValue(); return boxToInteger(val1 >>> val2); } } if (code1 <= LONG) { long val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).longValue(); if (code2 <= INT) { int val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).intValue(); return boxToLong(val1 >>> val2); } if (code2 <= LONG) { long val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).longValue(); return boxToLong(val1 >>> val2); } } throw new NoSuchMethodException(); } /** -arg */ public static Object negate(Object arg) throws NoSuchMethodException { int code = typeCode(arg); if (code <= INT) { int val = (code == CHAR) ? ((Character) arg).charValue() : ((Number) arg).intValue(); return boxToInteger(-val); } if (code <= LONG) { long val = (code == CHAR) ? ((Character) arg).charValue() : ((Number) arg).longValue(); return boxToLong(-val); } if (code <= FLOAT) { float val = (code == CHAR) ? ((Character) arg).charValue() : ((Number) arg).floatValue(); return boxToFloat(-val); } if (code <= DOUBLE) { double val = (code == CHAR) ? ((Character) arg).charValue() : ((Number) arg).doubleValue(); return boxToDouble(-val); } throw new NoSuchMethodException(); } /** +arg */ public static Object positive(Object arg) throws NoSuchMethodException { int code = typeCode(arg); if (code <= INT) { int val = (code == CHAR) ? ((Character) arg).charValue() : ((Number) arg).intValue(); return boxToInteger(+val); } if (code <= LONG) { long val = (code == CHAR) ? ((Character) arg).charValue() : ((Number) arg).longValue(); return boxToLong(+val); } if (code <= FLOAT) { float val = (code == CHAR) ? ((Character) arg).charValue() : ((Number) arg).floatValue(); return boxToFloat(+val); } if (code <= DOUBLE) { double val = (code == CHAR) ? ((Character) arg).charValue() : ((Number) arg).doubleValue(); return boxToDouble(+val); } throw new NoSuchMethodException(); } /** arg1 & arg2 */ public static Object takeAnd(Object arg1, Object arg2) throws NoSuchMethodException { if ((arg1 instanceof Boolean) || (arg2 instanceof Boolean)) { if (!((arg1 instanceof Boolean) && (arg2 instanceof Boolean))) { throw new NoSuchMethodException(); } return boxToBoolean(((Boolean) arg1).booleanValue() & ((Boolean) arg2).booleanValue()); } int code1 = typeCode(arg1); int code2 = typeCode(arg2); int maxcode = (code1 < code2) ? code2 : code1; if (maxcode <= INT) { int val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).intValue(); int val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).intValue(); return boxToInteger(val1 & val2); } if (maxcode <= LONG) { long val1 = (code1 == CHAR) ? ((Character) arg1).charValue() : ((Number) arg1).longValue(); long val2 = (code2 == CHAR) ? ((Character) arg2).charValue() : ((Number) arg2).longValue(); return boxToLong(val1 & val2); } throw new NoSuchMethodException(); } /** arg1 | arg2 */ public static Object takeOr(Object arg1, Object arg2) throws NoSuchMethodException { if ((arg1 instanceof Boolean) || (arg2 instanceof Boolean)) { if (!((arg1 instanceof Boolean) && (arg2 instanceof Boolean))) { throw new NoSuchMethodException(); }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?