Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,如何动态确定数组的类型?_Java - Fatal编程技术网

在Java中,如何动态确定数组的类型?

在Java中,如何动态确定数组的类型?,java,Java,运行前3行发射 Object o = new Long[0] System.out.println( o.getClass().isArray() ) System.out.println( o.getClass().getName() ) Class ofArray = ??? 我怎么得到???长型?我可以解析字符串并执行Class.forname(),但这太糟糕了。最简单的方法是什么 公共类getComponentType() 返回表示数组的组件类型的类。如果此类不表示数组类,则此方法返

运行前3行发射

Object o = new Long[0]
System.out.println( o.getClass().isArray() )
System.out.println( o.getClass().getName() )
Class ofArray = ???
我怎么得到???长型?我可以解析字符串并执行Class.forname(),但这太糟糕了。最简单的方法是什么

公共类getComponentType()
返回表示数组的组件类型的
。如果此类不表示数组类,则此方法返回null

:

公共类getComponentType()
返回表示数组的组件类型的
。如果此类不表示数组类,则此方法返回null

只要写

public Class<?> getComponentType()
发件人:

公共类getComponentType()

返回表示数组的组件类型的
。如果此类不表示数组类,则此方法返回
null

只要写

public Class<?> getComponentType()
发件人:

公共类getComponentType()

返回表示数组的组件类型的
。如果此类不表示数组类,则此方法返回
null


@迪米特罗夫是正确的答案。将其放入代码中,如下所示:

Class ofArray = o.getClass().getComponentType();

非常简单

@ddimitrov是正确的答案。将其放入代码中,如下所示:

Class ofArray = o.getClass().getComponentType();

非常简单

如果第一个元素为null,即字符串[]arr={null,“Chris”,“Joseph”}@Psycho,不管是否为null,所有这些解决方案都使用反射,反射基于存储的关于类的元信息,这些信息(可能)在运行时可用。反射通常是对类元信息的非法访问,在某些情况下,我们可能不允许使用它…似乎更好的解决方案是首先检查array.length是否为零并返回,如果为非零,则检查第一个元素的类型并获取类型信息,这不使用反射。但是,如果开发人员仍然想知道空数组的类型信息,那么反射似乎是唯一的选择@Psycho,不管是否为null,所有这些解决方案都使用反射,反射基于存储的关于类的元信息,这些信息(可能)在运行时可用。反射通常是对类元信息的非法访问,在某些情况下,我们可能不允许使用它…似乎更好的解决方案是首先检查array.length是否为零并返回,如果为非零,则检查第一个元素的类型并获取类型信息,这不使用反射。但是,如果开发人员仍然想知道空数组的类型信息,那么反射似乎是唯一的选择。
Object maybeArray = ...
Class<?> clazz = maybeArray.getClass();
if (clazz.isArray()) {
    System.out.printf("Array of type %s", clazz.getComponentType());
} else {
    System.out.println("Not an array");
}
String[] arr = {"Daniel", "Chris", "Joseph"};
arr.getClass().getComponentType();              // => java.lang.String