【问题标题】:Get type of array of class using Java reflection [duplicate]使用Java反射获取类数组的类型[重复]
【发布时间】:2014-07-07 09:14:19
【问题描述】:

在我的 android 项目中,我想编写一个函数,它应该返回 类数组的类型

Class getClassArrayType(String strClassName)
{

//some code

return class;
}

如果我将“Task”作为类名传递给上述函数,它应该返回Task[].class

我该怎么做?

我读过关于反射的文章,但它让我很困惑!

请帮帮我。

【问题讨论】:

标签: java android reflection


【解决方案1】:

一个选项可能是

public class Test {
    public static void main(String[] args) throws ClassNotFoundException {
        System.out.println(getClassArrayType(Test.class.getName()));
    }

    static Class getClassArrayType(String strClassName)
            throws ClassNotFoundException {
        Class cls = Class.forName(strClassName);

        Object[] arr = (Object[]) Array.newInstance(cls, 10);
        return arr.getClass();
    }

}

【讨论】:

  • 这与agad的解决方案基本相同,只是你创建了一个由10个元素而不是0个元素组成的数组,并向Object[]添加了一个无用的强制转换。
【解决方案2】:

不确定这是不是最好的方法,但至少对非数组类型有效

String className = "java.lang.String";
String arrayClassName = "[L" + className + ";";
Class<?> arrayClass = Class.forName(arrayClassName);

【讨论】:

    【解决方案3】:

    我不知道它是否是最佳的,但我是按照以下方式进行的:

    Array.newInstance(Class.forName("strClassName"), 0).getClass()
    

    此外,strClassName 必须是所需类的完全限定名。

    【讨论】:

    • 好把戏。太糟糕了,它创建了一个无用的空数组。
    • 像魅力一样工作!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多