gpt4 book ai didi

java - Java中如何测试一个对象是原始类型还是原始类型数组?

转载 作者:行者123 更新时间:2023-12-02 07:52:12 25 4
gpt4 key购买 nike

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

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[]

对于单独的值,检查它是否是包装类(整数、浮点等)之一的实例或字符串应该可以工作,因为自动装箱,但我不知道如何检查数组情况。有什么想法吗?

最佳答案

  • 要测试对象是否是数组,只需 getClass() 并查看它是否 isArray()
  • 要获取声明为保存的元素类型,请在类实例上使用 getComponentType()
  • 要测试某种类型是否是原始类型,您可以使用 isPrimitive()
  • 如果您想检查类型是否代表 String,只需使用 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();
}

上述方法的问题是它无法接受原始类型值,因为它需要 Object obj 这意味着它强制将任何原始类型值自动装箱到其包装类。例如,如果 wa 像 isBaseTypeOrArray(1) 那样调用它,原始 int 1 将被包装为 Integer 1。

要接受纯基本类型的参数(例如 int 而不是 Integer),我们需要该方法的重载版本,该版本将接受基本类型,例如 boolean isBaseTypeOrArray( int obj)。此类方法可以立即返回 true 作为结果,因为它们被调用意味着原始类型值作为参数传递。

因此,要处理所有原始类型,我们需要添加以下方法:

public static boolean isBaseTypeOrArray(boolean obj) {return true;}
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;}

关于java - Java中如何测试一个对象是原始类型还是原始类型数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21226648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com