在Java中,如何动态确定数组的类型?
运行前3行发射在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() 返回表示数组的组件类型的类。如果此类不表示数组类,则此方法返
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