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

Java数组如何不能通过索引访问?,java,arrays,Java,Arrays,字节数组位于HashMap子类的in实例中,我将其命名为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); 或 或

字节数组位于HashMap子类的in实例中,我将其命名为
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);

编译器之所以抱怨,是因为它说
obj.get(“data”)
(反映says是一个数组)实际上只是一个对象,因此没有这些可用的行为

我的基本问题是:

如果reflect方法不是数组,那么它的确切含义是什么

Class c = obj.get("data").getClass();
这将返回从映射中检索到的任何对象的运行时类。但是:

System.out.println(obj.get("data").length);
编译器根据映射的编译时(声明的)类验证表达式。您尚未向我们显示映射的声明,因此我们无法确定
get()
返回的编译时类型

从错误消息中,我认为是

Map<String,Object> obj;
Map对象;
甚至只是一个未声明类型参数的原始映射

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

例如,解决方案是将映射声明为

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

对象是类实例或数组。这不能为true,因为此对象是对象的实例,并且在其类调用后也返回truePeter,在java中,数组是一个对象。显示
obj的定义
我希望前三个不起作用。我希望最后一个起作用。这会给你带来什么错误?(仅仅因为它是数组并不意味着你不必在对它执行数组操作之前将它强制转换为数组类型。)
System.out.println(obj.get("data").length);
Map<String,Object> obj;
Map<String, byte[]> obj = new HashMap<>();