基于传递的字符串创建和返回对象

时间:2013-06-06 18:35:05

标签: java string object reflection

有没有办法根据Java中传递的字符串创建和返回一个对象?我想创建作为Package类的子类的对象,并通过调用传递类名的方法来完成此操作。我可以很容易地用switch语句完成这个,但是如果我这样做的话,当我添加更多子类的包时,我将不必调整switch语句。

以下是我的代码:

包变量:

private Package testPackage;

方法调用:

createPackage(testPackage, "TestPackage");

方法:

Object createPackage(Object curPackage, String packageName)
{   
    Object object = null;

    try
    {
        Class<?> aClass = Class.forName("a.b.c.packages." +packageName);
        Constructor<?> constructor = aClass.getConstructor(new Class[] { String.class });
        object = constructor.newInstance(new Object[] { packageName });
    } catch (Exception e)
    {
        e.printStackTrace();
    }

    return object;
}

找到该类,但在运行此方法并尝试调用

之后
Log.v(TAG, testPackage.getName());

我得到一个空指针异常。我正在编写Android代码,但我不认为这会对这种情况产生影响。

2 个答案:

答案 0 :(得分:1)

您有一个NullPointerException,因为您没有初始化testPackage

你必须施展结果:

 testPackage = (Package)createPackage("TestPackage")

(您可以删除第一个未使用的参数)

答案 1 :(得分:0)

所以我相信你的问题是你永远不会在你的方法中分配你的变量curPackage(至少从你所写的代码中可以看出来)。您需要分配testPackage,即:

private Package testPackage = (Package) createPackage("TestPackage");

此时您可以删除您的Object参数,因为它从未在方法中使用过。