如何通过索引访问Java数组?

时间:2016-10-02 01:55:11

标签: java arrays

字节数组位于HashMap的子类实例中,我将其命名为obj,当我在其上调用这些方法时:

 Class c = obj.get("data").getClass();
 System.out.println(c.getName() + " is array " + c.isArray());

打印

 [B is array true

从我所读到的关于[B符号的内容来看,这意味着它是一个字节数组。但是,当我尝试在其上调用这些方法时

System.out.println(obj.get("data").length);

System.out.println(obj.get("data")[0]);

System.out.println(obj.get("data").get(0));

byte[] ar = (byte[]) obj.get("data");

编译器抱怨,因为它说obj.get("data"),它反映的是一个数组,实际上只是一个Object,因此没有这些可用的行为。

我的基本问题是:

反射方法isArray()究竟是什么意思,如果不是它是一个数组?

1 个答案:

答案 0 :(得分:1)

考虑

Class c = obj.get("data").getClass();

这将返回从地图中检索到的任何对象的运行时类。但是:

System.out.println(obj.get("data").length);

编译器根据映射的编译时间(声明)类验证表达式。您尚未向我们展示地图的声明,因此我们无法确定get()返回的编译时类型。

从错误消息中我假设它

Map<String,Object> obj;

甚至只是声明没有类型参数的原始地图。

由于编译器不知道运行时类型,因此会抱怨。

解决方案是将地图声明为,例如

Map<String, byte[]> obj = new HashMap<>();