浏览代码

添加 BigIntegerExt 扩展 BigInteger

James 2 年之前
父节点
当前提交
2b63873bac

+ 10 - 10
src/main/java/com/jfinal/kit/ScheduledKit.java

@@ -75,21 +75,21 @@ public class ScheduledKit {
 	 * @param delay 上次任务 "完成" 时间与本次任务 "开始" 时间的间隔
 	 * @param unit 时间单位
 	 */
-	public static ScheduledFuture<?> scheduleWithFixedDelay(Runnable task, long initialDelay, long delay, TimeUnit unit) {
+	public static ScheduledFuture<?> scheduleWithFixedDelay(long initialDelay, long delay, TimeUnit unit , Runnable task) {
 		return getExecutor().scheduleWithFixedDelay(task, initialDelay, delay, unit);
 	}
 
 	/**
 	 * 任务添加 try catch ,避免 scheduleWithFixedDelay 方法在调度任务出现异常后会终止调度
  	 */
-	public static ScheduledFuture<?> scheduleWithFixedDelayWithTryCatch(Runnable task, long initialDelay, long delay, TimeUnit unit) {
-		return scheduleWithFixedDelay(() -> {
+	public static ScheduledFuture<?> scheduleWithFixedDelayWithTryCatch(long initialDelay, long delay, TimeUnit unit, Runnable task) {
+		return scheduleWithFixedDelay(initialDelay, delay, unit, () -> {
 			try {
 				task.run();
 			} catch (Throwable t) {
 				Log.getLog(ScheduledKit.class).error(t.getMessage(), t);
 			}
-		}, initialDelay, delay, unit);
+		});
 	}
 
 	/**
@@ -99,21 +99,21 @@ public class ScheduledKit {
 	 * @param period 上次任务 "开始" 时间与本次任务 "开始" 时间的间隔,如果任务执行时长超出 period 值,则在任务执行完成后立即调度任务执行
 	 * @param unit 时间单位
 	 */
-	public static ScheduledFuture<?> scheduleAtFixedRate(Runnable task, long initialDelay, long period, TimeUnit unit) {
+	public static ScheduledFuture<?> scheduleAtFixedRate(long initialDelay, long period, TimeUnit unit, Runnable task) {
 		return getExecutor().scheduleAtFixedRate(task, initialDelay, period, unit);
 	}
 
 	/**
 	 * 任务添加 try catch ,避免 scheduleAtFixedRate 方法在调度任务出现异常后会终止调度
  	 */
-	public static ScheduledFuture<?> scheduleAtFixedRateWithTryCatch(Runnable task, long initialDelay, long period, TimeUnit unit) {
-		return scheduleAtFixedRate(() -> {
+	public static ScheduledFuture<?> scheduleAtFixedRateWithTryCatch(long initialDelay, long period, TimeUnit unit, Runnable task) {
+		return scheduleAtFixedRate(initialDelay, period, unit, () -> {
 			try {
 				task.run();
 			} catch (Throwable t) {
 				Log.getLog(ScheduledKit.class).error(t.getMessage(), t);
 			}
-		}, initialDelay, period, unit);
+		});
 	}
 
 	/**
@@ -122,7 +122,7 @@ public class ScheduledKit {
      * @param delay 从现在开始的延迟时间
      * @param unit 时间单位
      */
-	public static ScheduledFuture<?> schedule(Runnable task, long delay, TimeUnit unit) {
+	public static ScheduledFuture<?> schedule(long delay, TimeUnit unit, Runnable task) {
 		return getExecutor().schedule(task, delay, unit);
 	}
 
@@ -132,7 +132,7 @@ public class ScheduledKit {
      * @param delay 从现在开始的延迟时间
      * @param unit 时间单位
      */
-	public static <V> ScheduledFuture<V> schedule(Callable<V> task, long delay, TimeUnit unit) {
+	public static <V> ScheduledFuture<V> schedule(long delay, TimeUnit unit, Callable<V> task) {
 		return getExecutor().schedule(task, delay, unit);
 	}
 

+ 50 - 49
src/main/java/com/jfinal/template/expr/ast/MethodKit.java

@@ -31,31 +31,31 @@ import com.jfinal.template.ext.extensionmethod.*;
  * MethodKit
  */
 public class MethodKit {
-	
+
 	private static final Class<?>[] NULL_ARG_TYPES = new Class<?>[0];
 	private static final Set<String> forbiddenMethods = new HashSet<String>(64);
 	private static final Set<Class<?>> forbiddenClasses = new HashSet<Class<?>>(64);
 	private static final Map<Class<?>, Class<?>> primitiveMap = new HashMap<Class<?>, Class<?>>(64);
 	private static final SyncWriteMap<Long, MethodInfo> methodCache = new SyncWriteMap<Long, MethodInfo>(2048, 0.25F);
-	
+
 	// 初始化在模板中调用 method 时所在的被禁止使用类
 	static {
 		Class<?>[] cs = {
 			System.class, Runtime.class, Thread.class, Class.class, ClassLoader.class, File.class,
 			Compiler.class, InheritableThreadLocal.class, Package.class, Process.class,
 			RuntimePermission.class, SecurityManager.class, ThreadGroup.class, ThreadLocal.class,
-			
+
 			java.lang.reflect.Method.class,
 			java.lang.reflect.Proxy.class,
 			java.lang.ProcessBuilder.class,
-			
+
 			MethodKit.class
 		};
 		for (Class<?> c : cs) {
 			forbiddenClasses.add(c);
 		}
 	}
-	
+
 	// 初始化在模板中被禁止使用的 method name
 	static {
 		String[] ms = {
@@ -64,7 +64,7 @@ public class MethodKit {
 			"notify", "notifyAll", "wait",
 			"exit", "loadLibrary", "halt", // "load",
 			"stop", "suspend", "resume", // "setDaemon", "setPriority"
-			
+
 			"removeForbiddenClass",
 			"removeForbiddenMethod"
 		};
@@ -72,7 +72,7 @@ public class MethodKit {
 			forbiddenMethods.add(m);
 		}
 	}
-	
+
 	// 初始化 primitive type 与 boxed type 双向映射关系
 	static {
 		primitiveMap.put(byte.class, Byte.class);
@@ -83,7 +83,7 @@ public class MethodKit {
 		primitiveMap.put(double.class, Double.class);
 		primitiveMap.put(char.class, Character.class);
 		primitiveMap.put(boolean.class, Boolean.class);
-		
+
 		primitiveMap.put(Byte.class, byte.class);
 		primitiveMap.put(Short.class, short.class);
 		primitiveMap.put(Integer.class, int.class);
@@ -93,35 +93,35 @@ public class MethodKit {
 		primitiveMap.put(Character.class, char.class);
 		primitiveMap.put(Boolean.class, boolean.class);
 	}
-	
+
 	public static boolean isForbiddenClass(Class<?> clazz) {
 		return forbiddenClasses.contains(clazz);
 	}
-	
+
 	public static void addForbiddenClass(Class<?> clazz) {
 		forbiddenClasses.add(clazz);
 	}
-	
+
 	public static void removeForbiddenClass(Class<?> clazz) {
 		forbiddenClasses.remove(clazz);
 	}
-	
+
 	public static boolean isForbiddenMethod(String methodName) {
 		return forbiddenMethods.contains(methodName);
 	}
-	
+
 	public static void addForbiddenMethod(String methodName) {
 		forbiddenMethods.add(methodName);
 	}
-	
+
 	public static void removeForbiddenMethod(String methodName) {
 		forbiddenMethods.remove(methodName);
 	}
-	
+
 	public static void clearCache() {
 		methodCache.clear();
 	}
-	
+
 	public static MethodInfo getMethod(Class<?> targetClass, String methodName, Object[] argValues) {
 		Class<?>[] argTypes = getArgTypes(argValues);
 		Long key = getMethodKey(targetClass, methodName, argTypes);
@@ -132,10 +132,10 @@ public class MethodKit {
 			method = doGetMethod(key, targetClass, methodName, argTypes);
 			methodCache.putIfAbsent(key, method);
 		}
-		
+
 		return method;
 	}
-	
+
 	static Class<?>[] getArgTypes(Object[] argValues) {
 		if (argValues == null || argValues.length == 0) {
 			return NULL_ARG_TYPES;
@@ -146,18 +146,18 @@ public class MethodKit {
 		}
 		return argTypes;
 	}
-	
+
 	private static MethodInfo doGetMethod(Long key, Class<?> targetClass, String methodName, Class<?>[] argTypes) {
 		if (forbiddenClasses.contains(targetClass)) {
 			throw new RuntimeException("Forbidden class: " + targetClass.getName());
 		}
-		
+
 		// 仅开启 forbiddenClasses 检测
 		// Method、SharedMethod、StaticMethod 已用 MethodKit.isForbiddenMethod(...) 检测
 		// if (forbiddenMethods.contains(methodName)) {
 		// 	throw new RuntimeException("Forbidden method: " + methodName);
 		// }
-		
+
 		Method[] methodArray = targetClass.getMethods();
 		for (Method method : methodArray) {
 			if (method.getName().equals(methodName)) {
@@ -170,17 +170,17 @@ public class MethodKit {
 				}
 			}
 		}
-		
+
 		return NullMethodInfo.me;
 	}
-	
+
 	static boolean matchFixedArgTypes(Class<?>[] paraTypes, Class<?>[] argTypes) {
 		if (paraTypes.length != argTypes.length) {
 			return false;
 		}
 		return matchRangeTypes(paraTypes, argTypes, paraTypes.length);
 	}
-	
+
 	private static boolean matchRangeTypes(Class<?>[] paraTypes, Class<?>[] argTypes, int matchLength) {
 		for (int i=0; i<matchLength; i++) {
 			if (argTypes[i] == null) {
@@ -200,7 +200,7 @@ public class MethodKit {
 		}
 		return true;
 	}
-	
+
 	static boolean matchVarArgTypes(Class<?>[] paraTypes, Class<?>[] argTypes) {
 		int fixedParaLength = paraTypes.length - 1;
 		if (argTypes.length < fixedParaLength) {
@@ -209,7 +209,7 @@ public class MethodKit {
 		if (!matchRangeTypes(paraTypes, argTypes, fixedParaLength)) {
 			return false;
 		}
-		
+
 		Class<?> varArgType = paraTypes[paraTypes.length - 1].getComponentType();
 		for (int i=fixedParaLength; i<argTypes.length; i++) {
 			if (argTypes[i] == null) {
@@ -228,16 +228,16 @@ public class MethodKit {
 		}
 		return true;
 	}
-	
+
 	/**
 	 * 获取方法用于缓存的 key
 	 */
 	private static Long getMethodKey(Class<?> targetClass, String methodName, Class<?>[] argTypes) {
 		return MethodKeyBuilder.instance.getMethodKey(targetClass, methodName, argTypes);
 	}
-	
+
 	// 以下代码实现 extension method 功能 --------------------
-	
+
 	// 添加 jfinal 官方扩展方法 extension method
 	static {
 		addExtensionMethod(String.class, new StringExt());
@@ -247,34 +247,34 @@ public class MethodKit {
 		addExtensionMethod(Double.class, new DoubleExt());
 		addExtensionMethod(Short.class, new ShortExt());
 		addExtensionMethod(Byte.class, new ByteExt());
-		
+
 		addExtensionMethod(BigInteger.class, new BigIntegerExt());
 	}
-	
+
 	public synchronized static void addExtensionMethod(Class<?> targetClass, Object objectOfExtensionClass) {
 		Class<?> extensionClass = objectOfExtensionClass.getClass();
 		java.lang.reflect.Method[] methodArray = extensionClass.getMethods();
 		for (java.lang.reflect.Method method : methodArray) {
-			Class<?> decClass = method.getDeclaringClass();	
+			Class<?> decClass = method.getDeclaringClass();
 			if (decClass == Object.class) {		// 考虑用于优化路由生成那段代码
 				continue ;
 			}
-			
+
 			Class<?>[] extensionMethodParaTypes = method.getParameterTypes();
 			String methodName = method.getName();
 			if (extensionMethodParaTypes.length == 0) {
 				throw new RuntimeException(buildMethodSignatureForException("Extension method requires at least one argument: " + extensionClass.getName() + ".", methodName, extensionMethodParaTypes));
 			}
-			
+
 			// Extension method 第一个参数必须与当前对象的类型一致,在调用时会将当前对象自身传给扩展方法的第一个参数
 			// if (targetClass != extensionMethodParaTypes[0]) {
 			if (!extensionMethodParaTypes[0].isAssignableFrom(targetClass)) {	// 支持第一个参数为被扩展类的父类,注意在注册时仍要确切的子类
 				throw new RuntimeException(buildMethodSignatureForException("The first argument type of : " + extensionClass.getName() + ".", methodName, extensionMethodParaTypes) + " must be: " + targetClass.getName());
 			}
-			
+
 			Class<?>[] targetParaTypes = new Class<?>[extensionMethodParaTypes.length - 1];
 			System.arraycopy(extensionMethodParaTypes, 1, targetParaTypes, 0, targetParaTypes.length);
-			
+
 			try {
 				Method error = targetClass.getMethod(methodName, targetParaTypes);
 				if (error != null) {
@@ -285,38 +285,38 @@ public class MethodKit {
 				if (methodCache.containsKey(key)) {
 					throw new RuntimeException(buildMethodSignatureForException("The extension method is already exists: " + extensionClass.getName() + ".", methodName, targetParaTypes));
 				}
-				
+
 				MethodInfoExt mie = new MethodInfoExt(objectOfExtensionClass, key, extensionClass/* targetClass */, method);
 				methodCache.putIfAbsent(key, mie);
 			}
 		}
 	}
-	
+
 	public static void addExtensionMethod(Class<?> targetClass, Class<?> extensionClass) {
 		addExtensionMethod(targetClass, ReflectKit.newInstance(extensionClass));
 	}
-	
+
 	public static void removeExtensionMethod(Class<?> targetClass, Object objectOfExtensionClass) {
 		Class<?> extensionClass = objectOfExtensionClass.getClass();
 		java.lang.reflect.Method[] methodArray = extensionClass.getMethods();
 		for (java.lang.reflect.Method method : methodArray) {
-			Class<?> decClass = method.getDeclaringClass();	
+			Class<?> decClass = method.getDeclaringClass();
 			if (decClass == Object.class) {		// 考虑用于优化路由生成那段代码
 				continue ;
 			}
-			
+
 			Class<?>[] extensionMethodParaTypes = method.getParameterTypes();
 			String methodName = method.getName();
 			Class<?>[] targetParaTypes = new Class<?>[extensionMethodParaTypes.length - 1];
 			System.arraycopy(extensionMethodParaTypes, 1, targetParaTypes, 0, targetParaTypes.length);
-			
+
 			Long key = MethodKit.getMethodKey(targetClass, methodName, toBoxedType(targetParaTypes));
 			methodCache.remove(key);
 		}
 	}
-	
+
 	private static final Map<Class<?>, Class<?>> primitiveToBoxedMap = new HashMap<Class<?>, Class<?>>(64);
-	
+
 	// 初始化 primitive type 到 boxed type 的映射
 	static {
 		primitiveToBoxedMap.put(byte.class, Byte.class);
@@ -328,12 +328,12 @@ public class MethodKit {
 		primitiveToBoxedMap.put(char.class, Character.class);
 		primitiveToBoxedMap.put(boolean.class, Boolean.class);
 	}
-	
+
 	/**
 	 * 由于从在模板中传递的基本数据类型参数只可能是 boxed 类型,当 extension method 中的方法参数是
 	 * primitive 类型时,在 getMethod(key) 时无法获取 addExtensionMethod(...) 注册的扩展方法
 	 * 所以为扩展方法调用 getMethodKey(...) 生成 key 时一律转成 boxed 类型去生成方法的 key 值
-	 * 
+	 *
 	 * 注意:该值仅用于在获取方法是通过 key 能获取到 MethindInfoExt,而 MethindInfoExt.paraType 仍然
 	 *      是原来的参数值
 	 */
@@ -342,7 +342,7 @@ public class MethodKit {
 		if (len == 0) {
 			return targetParaTypes;
 		}
-		
+
 		Class<?>[] ret = new Class<?>[len];
 		for (int i=0; i<len; i++) {
 			Class<?> temp = primitiveToBoxedMap.get(targetParaTypes[i]);
@@ -354,11 +354,11 @@ public class MethodKit {
 		}
 		return ret;
 	}
-	
+
 	public static void removeExtensionMethod(Class<?> targetClass, Class<?> extensionClass) {
 		removeExtensionMethod(targetClass, ReflectKit.newInstance(extensionClass));
 	}
-	
+
 	private static String buildMethodSignatureForException(String preMsg, String methodName, Class<?>[] argTypes) {
 		StringBuilder ret = new StringBuilder().append(preMsg).append(methodName).append("(");
 		if (argTypes != null) {
@@ -382,3 +382,4 @@ public class MethodKit {
 
 
 
+

+ 9 - 8
src/main/java/com/jfinal/template/ext/extensionmethod/ByteExt.java

@@ -18,36 +18,36 @@ package com.jfinal.template.ext.extensionmethod;
 
 /**
  * 针对 java.lang.Byte 的扩展方法
- * 
+ *
  * 用法:
  * #if(value.toInt() == 123)
  */
 public class ByteExt {
-	
+
 	public Boolean toBoolean(Byte self) {
 		return self != 0;
 	}
-	
+
 	public Integer toInt(Byte self) {
 		return self.intValue();
 	}
-	
+
 	public Long toLong(Byte self) {
 		return self.longValue();
 	}
-	
+
 	public Float toFloat(Byte self) {
 		return self.floatValue();
 	}
-	
+
 	public Double toDouble(Byte self) {
 		return self.doubleValue();
 	}
-	
+
 	public Short toShort(Byte self) {
 		return self.shortValue();
 	}
-	
+
 	public Byte toByte(Byte self) {
 		return self;
 	}
@@ -55,3 +55,4 @@ public class ByteExt {
 
 
 
+

+ 9 - 8
src/main/java/com/jfinal/template/ext/extensionmethod/DoubleExt.java

@@ -18,36 +18,36 @@ package com.jfinal.template.ext.extensionmethod;
 
 /**
  * 针对 java.lang.Double 的扩展方法
- * 
+ *
  * 用法:
  * #if(value.toInt() == 123)
  */
 public class DoubleExt {
-	
+
 	public Boolean toBoolean(Double self) {
 		return self != 0;
 	}
-	
+
 	public Integer toInt(Double self) {
 		return self.intValue();
 	}
-	
+
 	public Long toLong(Double self) {
 		return self.longValue();
 	}
-	
+
 	public Float toFloat(Double self) {
 		return self.floatValue();
 	}
-	
+
 	public Double toDouble(Double self) {
 		return self;
 	}
-	
+
 	public Short toShort(Double self) {
 		return self.shortValue();
 	}
-	
+
 	public Byte toByte(Double self) {
 		return self.byteValue();
 	}
@@ -55,3 +55,4 @@ public class DoubleExt {
 
 
 
+

+ 9 - 8
src/main/java/com/jfinal/template/ext/extensionmethod/FloatExt.java

@@ -18,36 +18,36 @@ package com.jfinal.template.ext.extensionmethod;
 
 /**
  * 针对 java.lang.Float 的扩展方法
- * 
+ *
  * 用法:
  * #if(value.toInt() == 123)
  */
 public class FloatExt {
-	
+
 	public Boolean toBoolean(Float self) {
 		return self != 0;
 	}
-	
+
 	public Integer toInt(Float self) {
 		return self.intValue();
 	}
-	
+
 	public Long toLong(Float self) {
 		return self.longValue();
 	}
-	
+
 	public Float toFloat(Float self) {
 		return self;
 	}
-	
+
 	public Double toDouble(Float self) {
 		return self.doubleValue();
 	}
-	
+
 	public Short toShort(Float self) {
 		return self.shortValue();
 	}
-	
+
 	public Byte toByte(Float self) {
 		return self.byteValue();
 	}
@@ -55,3 +55,4 @@ public class FloatExt {
 
 
 
+

+ 13 - 12
src/main/java/com/jfinal/template/ext/extensionmethod/IntegerExt.java

@@ -18,14 +18,14 @@ package com.jfinal.template.ext.extensionmethod;
 
 /**
  * 针对 java.lang.Integer 的扩展方法
- * 
+ *
  * 重要用途:
  *     Controller.keepPara() 方法会将所有类型的数据当成 String 并传回到
  *     到模板中,所以模板中的如下代码将无法工作:
  *    	 #if(age > 18)
  *      	 ....
  *    	 #end
- *    
+ *
  *     以上代码,第一次渲染模板时,由于 age 为 int 类型,那么 if 语句中是正确的表达式,
  *     当提交表单后在后端调用 keepPara() 以后 age 变成了 String 类型,表达式错误,
  *     在有了扩展方法以后,解决办法如下:
@@ -34,40 +34,40 @@ package com.jfinal.template.ext.extensionmethod;
  *       #end
  *     如上所示,无论 age 是 String 还是 int 型,调用其 toInt() 方法将一直确保
  *     age 为 int 类型
- * 
+ *
  *   以上用法,必须针对 String 与 Integer 同时扩展一个 toInt() 方法,模板表达式中的
  *   变量为 String 或为 Integer 时都存在 toInt() 方法可供调用
- * 
- * 
+ *
+ *
  * 用法:
  * #if(age.toInt() > 18)
  */
 public class IntegerExt {
-	
+
 	public Boolean toBoolean(Integer self) {
 		return self != 0;
 	}
-	
+
 	public Integer toInt(Integer self) {
 		return self;
 	}
-	
+
 	public Long toLong(Integer self) {
 		return self.longValue();
 	}
-	
+
 	public Float toFloat(Integer self) {
 		return self.floatValue();
 	}
-	
+
 	public Double toDouble(Integer self) {
 		return self.doubleValue();
 	}
-	
+
 	public Short toShort(Integer self) {
 		return self.shortValue();
 	}
-	
+
 	public Byte toByte(Integer self) {
 		return self.byteValue();
 	}
@@ -75,3 +75,4 @@ public class IntegerExt {
 
 
 
+

+ 9 - 8
src/main/java/com/jfinal/template/ext/extensionmethod/LongExt.java

@@ -18,36 +18,36 @@ package com.jfinal.template.ext.extensionmethod;
 
 /**
  * 针对 java.lang.Long 的扩展方法
- * 
+ *
  * 用法:
  * #if(value.toInt() == 123)
  */
 public class LongExt {
-	
+
 	public Boolean toBoolean(Long self) {
 		return self != 0;
 	}
-	
+
 	public Integer toInt(Long self) {
 		return self.intValue();
 	}
-	
+
 	public Long toLong(Long self) {
 		return self;
 	}
-	
+
 	public Float toFloat(Long self) {
 		return self.floatValue();
 	}
-	
+
 	public Double toDouble(Long self) {
 		return self.doubleValue();
 	}
-	
+
 	public Short toShort(Long self) {
 		return self.shortValue();
 	}
-	
+
 	public Byte toByte(Long self) {
 		return self.byteValue();
 	}
@@ -55,3 +55,4 @@ public class LongExt {
 
 
 
+

+ 9 - 8
src/main/java/com/jfinal/template/ext/extensionmethod/ShortExt.java

@@ -18,36 +18,36 @@ package com.jfinal.template.ext.extensionmethod;
 
 /**
  * 针对 java.lang.Short 的扩展方法
- * 
+ *
  * 用法:
  * #if(value.toInt() == 123)
  */
 public class ShortExt {
-	
+
 	public Boolean toBoolean(Short self) {
 		return self != 0;
 	}
-	
+
 	public Integer toInt(Short self) {
 		return self.intValue();
 	}
-	
+
 	public Long toLong(Short self) {
 		return self.longValue();
 	}
-	
+
 	public Float toFloat(Short self) {
 		return self.floatValue();
 	}
-	
+
 	public Double toDouble(Short self) {
 		return self.doubleValue();
 	}
-	
+
 	public Short toShort(Short self) {
 		return self;
 	}
-	
+
 	public Byte toByte(Short self) {
 		return self.byteValue();
 	}
@@ -55,3 +55,4 @@ public class ShortExt {
 
 
 
+

+ 13 - 12
src/main/java/com/jfinal/template/ext/extensionmethod/StringExt.java

@@ -20,14 +20,14 @@ import com.jfinal.kit.StrKit;
 
 /**
  * 针对 java.lang.String 的扩展方法
- * 
+ *
  * 重要用途:
  *     Controller.keepPara() 方法会将所有类型的数据当成 String 并传回到
  *     到模板中,所以模板中的如下代码将无法工作:
  *    	 #if(age > 18)
  *      	 ....
  *    	 #end
- *    
+ *
  *     以上代码,第一次渲染模板时,由于 age 为 int 类型,那么 if 语句中是正确的表达式,
  *     当提交表单后在后端调用 keepPara() 以后 age 变成了 String 类型,表达式错误,
  *     在有了扩展方法以后,解决办法如下:
@@ -36,15 +36,15 @@ import com.jfinal.kit.StrKit;
  *       #end
  *     如上所示,无论 age 是 String 还是 int 型,调用其 toInt() 方法将一直确保
  *     age 为 int 类型
- * 
+ *
  *   以上用法,必须针对 String 与 Integer 同时扩展一个 toInt() 方法,模板表达式中的
  *   变量为 String 或为 Integer 时都存在 toInt() 方法可供调用
- * 
+ *
  * 用法:
  * #if(age.toInt() > 18)
  */
 public class StringExt {
-	
+
 	/**
 	 * StringExt.toBoolean() 是数据类型转换,所以与 Logic.isTrue(String)
 	 * 中的逻辑不同,后者只要 String 值非 null 并且 length() > 0 即返回 true
@@ -53,7 +53,7 @@ public class StringExt {
 		if (StrKit.isBlank(self)) {
 			return null;	// return Boolean.FALSE;
 		}
-		
+
 		String value = self.trim().toLowerCase();
 		if ("true".equals(value) || "1".equals(value)) {	// 未来考虑 "yes"、"on"
 			return Boolean.TRUE;
@@ -63,27 +63,27 @@ public class StringExt {
 			throw new RuntimeException("Can not parse to boolean type of value: \"" + self + "\"");
 		}
 	}
-	
+
 	public Integer toInt(String self) {
 		return StrKit.isBlank(self) ? null : Integer.parseInt(self);
 	}
-	
+
 	public Long toLong(String self) {
 		return StrKit.isBlank(self) ? null : Long.parseLong(self);
 	}
-	
+
 	public Float toFloat(String self) {
 		return StrKit.isBlank(self) ? null : Float.parseFloat(self);
 	}
-	
+
 	public Double toDouble(String self) {
 		return StrKit.isBlank(self) ? null : Double.parseDouble(self);
 	}
-	
+
 	public Short toShort(String self) {
 		return StrKit.isBlank(self) ? null : Short.parseShort(self);
 	}
-	
+
 	public Byte toByte(String self) {
 		return StrKit.isBlank(self) ? null : Byte.parseByte(self);
 	}
@@ -92,3 +92,4 @@ public class StringExt {
 
 
 
+