获取Java中数组元素的类型

获取Java中数组元素的类型,java,arrays,object,integer,Java,Arrays,Object,Integer,我有以下方法: public static int arraySum(Object obj) { } 该方法应返回obj中所有元素的总和;此方法的先决条件是obj必须是任意维的整数数组,即Integer、Integer[]、Integer[][],等等 为了编写方法的主体arraySum(),我使用了foreach循环和递归;然而,对于foreach循环,我需要知道obj的元素是哪种类型的。有没有办法找出obj的类型(即Integer,Integer[]等) 编辑:这是我的CS课程的作业。我不

我有以下方法:

public static int arraySum(Object obj) {
}
该方法应返回obj中所有元素的总和;此方法的先决条件是
obj
必须是任意维的整数数组,即
Integer
Integer[]
Integer[][]
,等等

为了编写方法的主体
arraySum()
,我使用了foreach循环和递归;然而,对于foreach循环,我需要知道obj的元素是哪种类型的。有没有办法找出
obj
的类型(即
Integer
Integer[]
等)


编辑:这是我的CS课程的作业。我不想简单地问如何编写方法,这就是为什么我要问这样一个具体的问题。

我相信它比你想象的要简单:

public static int arraySum(Object obj) {
    if (obj.getClass() == Integer.class)
        return ((Integer) obj).intValue();

    int sum = 0;
    for (Object o : (Object[]) obj)
        sum += arraySum(o);

    return sum;
}
基本上,我们利用了这样一个事实:任何维度的
整数
数组仍然是
对象[]


55
您可以使用简单的
instanceof
,例如:

if (obj instanceof Integer[][]) 
    System.out.println("2d");
if (obj instanceof Integer[]) 
    System.out.println("1d");
if (obj instanceof Integer) 
    System.out.println("0d");

为什么不使用2个重载?如果(myarray[I]instanceof type)。。。。;你认为这就是你想要的吗?@Jeroenvanevel不确定什么是过载:P@pedromss
obj
可以有任意数量的维度,这意味着大量的if语句与之相关。你应该有充分的理由想这样做。对我来说这听起来像个XY问题。也许你应该给我们更多的上下文来解释你为什么要这样做。如果你这样调用它,这将导致一个
ClassCastException
。在for循环中进行强制转换之前,应该对数组类型
obj.getClass().isArray()
进行额外的检查,当然还有空检查。@A4L“此方法的一个先决条件是
obj
是任意维的整数数组”,尽管OP可以在确实需要时添加这些检查。这是一个简单的添加,方法的核心将保持不变。OP必须确保只向其传递数组+1仍然是一个优雅的解决方案! 55
if (obj instanceof Integer[][]) 
    System.out.println("2d");
if (obj instanceof Integer[]) 
    System.out.println("1d");
if (obj instanceof Integer) 
    System.out.println("0d");