2

有没有办法根据Java中传递的字符串创建和返回对象?我想创建作为 Package 类的子类的对象,并通过调用传递类名的方法来做到这一点。我可以很容易地使用 switch 语句来完成此操作,但如果我这样做,当我添加更多 Packages 子类时,我不必调整 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 代码,但我认为这在这种情况下并没有什么不同。

4

2 回答 2

1

你有一个 NullPointerException 因为你没有初始化testPackage

你必须转换结果:

 testPackage = (Package)createPackage("TestPackage")

(并且可以去掉第一个参数,没有用到)

于 2013-06-06T19:07:13.547 回答
0

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

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

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

于 2013-06-06T19:15:47.723 回答