首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中有没有办法通过名字来实例化一个类?

在Java中有没有办法通过名字来实例化一个类?
EN

Stack Overflow用户
提问于 2012-03-27 16:58:25
回答 6查看 139.1K关注 0票数 115

我正在寻找一个问题:Instantiate a class from its string name,它描述了如何在拥有一个类的名称时实例化它。有没有办法在Java中做到这一点?我将拥有包名和类名,并且我需要能够创建具有该特定名称的对象。

EN

回答 6

Stack Overflow用户

发布于 2012-03-27 17:01:22

代码语言:javascript
复制
MyClass myInstance = (MyClass) Class.forName("MyClass").newInstance();
票数 16
EN

Stack Overflow用户

发布于 2015-01-01 02:27:37

为了使获取类的完全限定名以便使用Class.forName(...)创建实例变得更容易,可以使用Class.getName()方法。类似于:

代码语言:javascript
复制
class ObjectMaker {
    // Constructor, fields, initialization, etc...
    public Object makeObject(Class<?> clazz) {
        Object o = null;

        try {
            o = Class.forName(clazz.getName()).newInstance();
        } catch (ClassNotFoundException e) {
            // There may be other exceptions to throw here, 
            // but I'm writing this from memory.
            e.printStackTrace();
        }

        return o;
    }
}

然后,您可以将得到的对象强制转换为传递给makeObject(...)的任何类

代码语言:javascript
复制
Data d = (Data) objectMaker.makeObject(Data.class);
票数 4
EN

Stack Overflow用户

发布于 2019-09-19 06:33:06

从Java8开始,不推荐直接使用newInstance()。您需要使用Class.getDeclaredConstructor(...).newInstance(...),但有相应的异常。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9886266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档