这可能是一个非常愚蠢的问题,但我不知道如何解决这个问题。
int num;
String str;
float flt;
我定义了三个变量,一个是int,一个是String,一个是float。比我做以下事情:
Object a = num;
Object b = str;
Object c = flt;
如何检查a,b或c对象的默认值?我知道null
为String
,0
为int
,0.0
为float
,但有没有办法做有点:
if(a==nullValue(a) && b==nullValue(b) && c==nullValue(c))
所以它等于:
if(a==0 && b==null && c==0.0)
我只是通过了三个a,b,c对象,所以我不知道它们是哪种类型。
答案 0 :(得分:2)
Java是一种强类型语言,你试图打败而不是利用其核心优势之一。
从技术上讲,你可以达到你想要的效果,通常你必须针对所有可能的原始类型测试你的Object obj
+ null(因为你不知道这个对象到底是什么< / em>):
static boolean isDefaultValue(Object obj) {
if (obj == null // non-primitive
|| obj.equals((byte) 0) // default for byte
|| obj.equals((short) 0) // short
|| obj.equals((int) 0) // int
|| obj.equals(0L) // long
|| obj.equals(0.0f) // float
|| obj.equals(0.0d) // double
|| obj.equals('\u0000') // char
|| obj.equals(false)) { // boolean
return true;
}
return false;
}
但是,我真的鼓励你修改你的设计并问自己为什么要通过将所有内容都转换为Object
来完全删除数据类型,而不是这样做。这可能导致代码难以理解且非常危险。
发布您的理由,我们可以帮助您找到更好的解决方案。
答案 1 :(得分:1)
将此添加到您选择的课程中。
private static final List<? extends Object> DEFAULTS =
Arrays.asList( null, (byte) 0, (short) 0, 0, 0L, 0F, 0D, '\u0000', false );
private static boolean isDefault(Object o) {
return DEFAULTS.contains(o);
}
答案 2 :(得分:-1)
对于类型检查,您应该使用instanceof
这样的
Object obj = null;
int num = 0;
String str = null;
float flt = 0f;
obj = num;
// obj = str;
// obj = flt;
if(obj instanceof Integer){
//THEN IT SHOULD BE 0
}
else if(obj instanceof String){
//THEN IT SHOULD BE NULL
}
else if(obj instanceof Float){
//THEN IT SHOULD BE NULL
}
else{
//IT IS NULL BECAUSE Object obj = null;
}
适用于任何类型。