首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于类类型创建类实例?

基于类类型创建类实例?
EN

Stack Overflow用户
提问于 2014-03-07 08:13:32
回答 1查看 3.1K关注 0票数 1

我正在使用JAVA7。我有低年级的。

代码语言:javascript
复制
public class SomeClass<B extends Base, L extends Last>{
   Class<L> last;
   Class<B> base;

   public SomeClass(Class<L> last, Class<B> base){
       this.last=last;
       this.base=base;
   }
}

在这里,我需要创建一个方法,它将接受类类型,并创建它的实例并返回。我怎么能这么做?

public returnclassinstance createInstance(Class class)

我会通过传递最后/基础来调用这个方法。此方法必须创建传递的类类型的实例,并返回相同的实例。有可能吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-07 08:21:56

要创建基于java Class类型的新实例,您应该使用如下内容:

代码语言:javascript
复制
public <T> T createInstance(Class<T> clazz) throws InstantiationException, IllegalAccessException {
        return clazz.newInstance();
    }

注意,T应该有公共的默认构造函数。如果您想使用其他默认构造器来创建Class的新实例,那么您应该查看反射(例如,clazz.getDeclaredConstructors())。

编辑:使用带参数的构造函数

代码语言:javascript
复制
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class Test {
    public Test(String arg) {
        System.err.println("I'm in consturctor with one String arg: " + arg);
    }

    public static <T extends Test> T createInstance(Class<T> clazz) throws InstantiationException,
            IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        Constructor<T>[] constructors = (Constructor<T>[]) clazz.getDeclaredConstructors();
        Constructor<T> constructor = constructors[0];
        return constructor.newInstance("ARG");
    }

    public static void main(String[] args) throws Exception {
        createInstance(Test.class);
    }
}

在运行此代码之后,您应该进入输出:

代码语言:javascript
复制
I'm in consturctor with one String arg: ARG

但是请注意,这段代码是多么丑陋--在我看来,在Java中使用反射来创建这样的对象是最后的选择(如果我们没有任何其他解决方案)。

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

https://stackoverflow.com/questions/22244841

复制
相关文章

相似问题

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