代码之家  ›  专栏  ›  技术社区  ›  Bob Herrmann

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

  •  33
  • Bob Herrmann  · 技术社区  · 17 年前
    Object o = new Long[0]
    System.out.println( o.getClass().isArray() )
    System.out.println( o.getClass().getName() )
    Class ofArray = ???
    

    运行前3条发射线;

    true
    [Ljava.lang.Long;
    

    我该怎么办????要打字长吗?我可以解析字符串并做一个class.forname(),但这很奇怪。简单的方法是什么?

    3 回复  |  直到 9 年前
        1
  •  61
  •   T.J. Crowder    9 年前

    只写

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

    the JavaDoc :

    public Class<?> getComponentType()

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

        2
  •  21
  •   community wiki 2 revs, 2 users 71% gnat    9 年前

    http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Class.html#getComponentType() :

    public Class<?> getComponentType()
    

    返回 Class 表示数组的组件类型。如果此类不表示数组类,则此方法返回空值…

        3
  •  6
  •   Daniel Spiewak    17 年前

    @Ddimitrov是正确的答案。输入代码如下:

    public <T> Class<T> testArray(T[] array) {
        return array.getClass().getComponentType();
    }
    

    更一般地说,我们可以先测试类型是否表示数组,然后 然后 获取其组件:

    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
    

    很简单!