只能通过reflect来做么?类似于如下?
[code]
Class<? extends ClassA> clz = (Class<? extends ClassA>) Class.forName("NameOfClassInheritedFromClassA");
Class[] argsClass = new Class[] {Arg1.class, Arg2.class};
Constructor<? extends ClassA> constructor = clz.getConstructor(argsClass);
ClassA obj = constructor.newInstance(Arg1, Arg2);
[/code]有没有更简单的方法? 谢谢了!
[code]
Class<? extends ClassA> clz = (Class<? extends ClassA>) Class.forName("NameOfClassInheritedFromClassA");
Class[] argsClass = new Class[] {Arg1.class, Arg2.class};
Constructor<? extends ClassA> constructor = clz.getConstructor(argsClass);
ClassA obj = constructor.newInstance(Arg1, Arg2);
[/code]有没有更简单的方法? 谢谢了!
解决方案 »
- 求检查email 地址是否有效代码?
- 有人用过eCobertura的eclipse插件吗?
- JAVA JSP 怎么移动复制压缩包
- 几个简单的Java问题。想不通。
- 在j2me中想用一个装对象的数组或者其它集合对象,请指点小妹一下,在线!分不够再加!
- 如何让java的编译时的错误信息或输出的结果信息显示在指定的窗口中
- java可以做工业控制吗?
- Note: newWindow.java uses or overrides a deprecated API.
- Table疑点?
- 如何将一个java窗体永远显示在屏幕上而不被其他窗体覆盖??
- 看了好多帖子说J2SE学完后学J2EE,想知道大家说的J2EE具体是什么?
- 用GridBagLayout模拟BorderLayout
如果只是构造对象的话new就可以了。
ObjectInputStream
...
我补一下: Class<? extends ClassA> clz = (Class<? extends ClassA>) Class.forName("NameOfClassInheritedFromClassA");
Class[] argsClass = new Class[] {arg1.class, arg2.class};
Constructor<? extends ClassA> constructor = clz.getConstructor(argsClass);
ClassA obj = constructor.newInstance(arg1, arg2);意思就是知道类对象(Class)或者类名,然后构造对象,这要在Delphi就很简单,因为Delphi有虚拟构造函数,直接调用基类的虚拟构造函数就行了,不用这么麻烦,比如:ClassA = class
public
constructor Create(String a, Integer b); virtual;
end;ClassB = class
public
constructor Create(String a, Integer b); override;
end;
ClassOfA = class of ClassA;var
clz: ClassOfA;
obj: ClassA;
begin
clz := ...; //get class by class name
obj = clz.Create(a, b); //就这么简单
end;我想知道java有没有简单的方法,或者就只有这种方法
没有参数的话可以使用class对象的newInstance()