这里是我想要实现的函数签名。
public boolean isBaseTypeOrArray(Object obj){~}
我想仅在obj属于以下类型之一时返回true。
boolean or boolean[]
byte or byte[]
short or short[]
int or int[]
long or long[]
float or float[]
double or double[]
char or char[]
java.lang.String or String[]
对于一个单独的值检查它是否是其中一个包装类(Integer,Float,...)的实例,或者String应该因为自动装箱而工作但我不知道如何检查数组的情况。有什么想法吗?
答案 0 :(得分:8)
getClass()
并查看它是否为isArray()
。 getComponentType()
。 isPrimitive()
。 equals(String.class)
。因此,要测试Object是否表示基本类型数组或字符串数组,您可以使用
public static boolean isBaseTypeOrArray(Object obj) {
Class<?> c = obj.getClass();
return c.equals(String.class) || c.equals(String[].class) ||
c.isArray() && c.getComponentType().isPrimitive();
}
要测试传递的参数是否是基本类型,您可以重载该方法以使其仅接受基本类型参数。如果传递基本类型的参数(例如int
而不是Integer
),您将能够调用此类重载版本 ,否则版本处理Object
将使用参数,但该版本仅适用于数组和字符串。
public static boolean isBaseTypeOrArray(byte obj) {return true;}
public static boolean isBaseTypeOrArray(short obj) {return true;}
public static boolean isBaseTypeOrArray(char obj) {return true;}
public static boolean isBaseTypeOrArray(int obj) {return true;}
public static boolean isBaseTypeOrArray(long obj) {return true;}
public static boolean isBaseTypeOrArray(float obj) {return true;}
public static boolean isBaseTypeOrArray(double obj) {return true;}
public static boolean isBaseTypeOrArray(boolean obj) {return true;}
答案 1 :(得分:4)
我认为,您应该动态获取并测试您的值的类描述:
if (obj.getClass().equals(Boolean.class)) {
//...
}
//...
if (obj.getClass().equals(boolean[].class)) {
//...
}
//...
if (obj.getClass().equals(String.class)) {
//...
}
答案 2 :(得分:2)
您可以尝试这样的事情
public static void main(String[] args) {
System.out.println(isBaseTypeOrArray(new int[5]));
}
public static boolean isBaseTypeOrArray(Object obj){
return (obj.getClass().getComponentType().equals(int.class)||
obj.getClass().getComponentType().equals(byte.class));
}
答案 3 :(得分:0)
简单的解决方案
public static boolean isPrimitiveArray(Object obj) {
return obj != null
&& obj.getClass().isArray()
&& obj.getClass().getComponentType() != null
&& obj.getClass().getComponentType().isPrimitive();
}