簡體   English   中英

根據傳遞的字符串創建和返回對象

[英]Create and Return an Object Based on a Passed String

有什么方法可以基於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代碼,但是在這種情況下我認為這沒有什么不同。

您有一個NullPointerException,因為您沒有初始化testPackage

而且您必須轉換結果:

 testPackage = (Package)createPackage("TestPackage")

(您可以刪除第一個未使用的參數)

因此,我相信您的問題是,您永遠不會在方法中分配變量curPackage (至少從我所編寫的代碼中可以看出)。 您需要分配您的testPackage,即:

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

此時,您可以刪除Object參數,因為它從未在方法中使用過。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM