只能通过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]有没有更简单的方法? 谢谢了!

解决方案 »

  1.   

    已知类型,new 类型();不就行了?还reflect什么?
      

  2.   

    不太明白lz的意思。
    如果只是构造对象的话new就可以了。
      

  3.   

    ClassLoader
    ObjectInputStream
    ...
      

  4.   

    不是我写漏了,而是括在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);意思就是知道类对象(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有没有简单的方法,或者就只有这种方法
      

  5.   

    如果带参数估计只能就这样了,
    没有参数的话可以使用class对象的newInstance()