0

我有课TestClass是否可以在运行时为此创建新实例?就像我们TestClass someObj = new TestClass(); also TestClass[] someObj = new TestClass();为 java 原始类型创建相同的东西的方式一样。

如果可以通过示例支持答案,是否可以通过反思。

编辑:

import java.awt.Rectangle;

public class SampleNoArg {

   public static void main(String[] args) {
      Rectangle r = (Rectangle) createObject("java.awt.Rectangle");
      System.out.println(r.toString());
   }

   static Object createObject(String className) {
      Object object = null;
      try {
          Class classDefinition = Class.forName(className);
          object = classDefinition.newInstance();
      } catch (InstantiationException e) {
          System.out.println(e);
      } catch (IllegalAccessException e) {
          System.out.println(e);
      } catch (ClassNotFoundException e) {
          System.out.println(e);
      }
      return object;
   }
}

与上面相同,但我想创建一些对象数组。

4

1 回答 1

1

您不能使用Class#newInstance来实例化数组:

InstantiationException - 如果此类表示抽象类、接口、数组类、原始类型或 void;或者如果该类没有空构造函数;或者如果实例化由于某种其他原因而失败。

这是一个可能的解决方法:

@SuppressWarnings("unchecked")
public static <T> T[] newArray(Class<T> clazz, int n) {
    return (T[]) Array.newInstance(clazz, n);
}
于 2013-04-24T10:19:37.020 回答