我正在使用JAVA7。我有低年级的。
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)
我会通过传递最后/基础来调用这个方法。此方法必须创建传递的类类型的实例,并返回相同的实例。有可能吗?
谢谢!
发布于 2014-03-07 08:21:56
要创建基于java Class类型的新实例,您应该使用如下内容:
public <T> T createInstance(Class<T> clazz) throws InstantiationException, IllegalAccessException {
return clazz.newInstance();
}注意,T应该有公共的默认构造函数。如果您想使用其他默认构造器来创建Class的新实例,那么您应该查看反射(例如,clazz.getDeclaredConstructors())。
编辑:使用带参数的构造函数
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);
}
}在运行此代码之后,您应该进入输出:
I'm in consturctor with one String arg: ARG但是请注意,这段代码是多么丑陋--在我看来,在Java中使用反射来创建这样的对象是最后的选择(如果我们没有任何其他解决方案)。
https://stackoverflow.com/questions/22244841
复制相似问题