如何在Java中测试对象是原始类型还是原始类型数组?

时间:2014-01-20 05:10:12

标签: java

这里是我想要实现的函数签名。

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应该因为自动装箱而工作但我不知道如何检查数组的情况。有什么想法吗?

4 个答案:

答案 0 :(得分:8)

  • 要测试对象是否只是一个数组getClass()并查看它是否为isArray()
  • 要获取元素类型,声明数组在Class实例上保持使用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();
}