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

标签 java string object reflection

有什么方法可以在 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")

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

关于java - 基于传递的字符串创建和返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16969599/

相关文章:

c - 字符串分词器的使用

c - 字符串格式化时间优化 : pad a line to length K by adding spaces between words

C 程序 - 在每个其他字符之间放置一个星号而不替换字符串中的那些字符

python - 只初始化一次类变量

javascript - 使用 'this' 的 Object.prototype

Java 对象变量数组变化

java - Command Handler 是否只是从总线接收命令并发布事件?

java - 根据相应的输入 channel 适当存储通知

java - 不可变或不可修改集合的目的

java - 更改 ListView 中 TextView 的文本