【发布时间】:2014-06-26 08:24:51
【问题描述】:
请看下面的类,我需要检查变量中是否有有效值。如果变量中有适当的值而不是null,则一切正常,当它为空时,行为不是我所期望的(尽管如果Integer a = null; 被检查为a instanceof Integer 时可能有意义,
有人可以指导我如何从以下课程中获得正确的结果吗?
package com.mazhar.hassan;
public class ValueChecker {
public static boolean empty(Integer value) {
System.out.println("Integer");
return (value != null && value.intValue() > 0);
}
public static boolean empty(Long value) {
System.out.println("Long");
return (value != null && value.longValue() > 0);
}
public static boolean empty(String value) {
System.out.println("String");
return (value != null && value.length() > 0);
}
public static boolean empty(Object value) {
System.out.println("Object");
return (value != null);
}
public static void checkAll(Object... args) {
for(Object o: args) {
if (o instanceof Integer) {
empty((Integer)o);
}
else if (o instanceof Long) {
empty((Long)o);
}
else if (o instanceof String) {
empty((String)o);
}
else {
empty(o);
}
}
}
public static void main (String[] args) {
Integer a = null;
Long b = null;
String x = null;
Object y = null;
if (a instanceof Integer) {
System.out.println("a is Integer");
} else {
System.out.println("a is not Integer");
}
System.out.println("/---------------------------------------------------/");
checkAll(a,b,x,y);
System.out.println("/---------------------------------------------------/");
empty(a);
empty(b);
empty(x);
empty(y);
}
}
为什么我需要精确的类型检查,我必须抛出诸如“无效整数”、“无效长整数”等错误。
上述类的输出如下。
/-----------------------(Output 1)----------------------------/
a is not Integer
/-----------------------(Output 2)----------------------------/
Object
Object
Object
Object
/------------------------(Output 3)---------------------------/
Integer
Long
String
Object
输出 1:a 不是整数(由 instanceof 检查)无法识别,但当传递给重载函数时会转到正确的函数(输出 3)
输出 2:如何使用多个/动态参数 checkAll(varInt, varLong, varString, varObject) 实现checkAll
【问题讨论】:
-
我认为你应该提出一个通用的空指针错误,比如“该字段不能为空”,如果有任何数据,那么验证具体格式(在这种情况下你不需要甚至需要的实例)。这也将避免粘合代码(如果 xxx!=null 则复制并粘贴)。让我知道这是否符合您的需求。
标签: java casting overloading