【问题标题】:Can you use instanceOf to determine if an Object is an array and then iterate over that array?您可以使用 instanceOf 来确定 Object 是否是一个数组,然后遍历该数组吗?
【发布时间】:2019-10-16 10:52:30
【问题描述】:

假设我有一个接受 java 对象 (Java.lang.Object) 实例作为参数的方法。有没有办法确定传入的 Object 是否是一个数组(任何东西),然后对其进行迭代?

这就是我目前正在尝试做的事情

public static void isThisAnArray(Object x) {
     if (x instanceof Object[]){
         for (Object item : x) {
             //do something with item
         }
     }
}

但我在for (Object item : x) 行上得到“只能遍历数组或 java.lang.Iterable 的实例”,这是有道理的,因为我传入的是对象而不是对象数组。但是如果那个对象是一个对象数组呢?抱歉,如果这令人困惑,但有没有办法确定传入的 java 对象是否是一个数组?

【问题讨论】:

  • 我不明白你的问题。上面的代码是否给出了错误信息?还是您确定“它是一个数组”,然后在使用它之前 not 强制转换为数组?
  • stackoverflow.com/questions/219881/… ...您显示的代码非常好。所以:你的问题是什么。
  • 您的代码中没有任何地方尝试迭代任何内容。您能否显示产生该错误的代码?我的预感是你试图在不强制转换的情况下迭代x(仅仅因为x 引用的对象是一个数组并不意味着你可以在x 上执行数组操作,因为类型变量Object,而不是Object[])。
  • 抱歉,我刚刚更新了我的代码以显示我真正想要做的事情

标签: java


【解决方案1】:

用 instanceof 将东西放在条件中不会神奇地让编译器知道它是那个的实例。你实际上必须投射:

if (x instanceof Object[]){
  for (Object item : (Object[]) x) {
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    相关资源
    最近更新 更多