每次创建不同 Class 的新对象

Create Object of new different Class every time

我想连续创建新的class(具体名称不同)的对象。

public static void main(String args[]) {
    while (true) {
        Object obj = getNewClassObject();
        System.out.println(obj.getClass.getName());
    }
}

public static Object getNewClassObject() {
    // some code
}

任务是我们应该在方法中写什么,所以它 return 每次都是不同 class 的对象,并且程序在每一行打印不同的 class 名称。

我试过使用匿名 class、内部 class、lambda 等。但它们都 return 相同的 class 名称。 我当前的“蹩脚”解决方案是在播放应用程序中创建新的 class 文件(具有重新加载能力),然后使用反射库(或仅 java 代码)加载 class 并获取对象新 class.

但它需要大量内存,反射方法 getSubTypeOf() 也需要很多时间 ~100 秒,一段时间后我得到 OutOfMemoryError。 我希望有更好的方法来做到这一点。我正在考虑卸载或释放 class 元数据以释放内存。

Javassist试试

private static ClassPool pool = ClassPool.getDefault();
private static RandomString rs = new RandomString();

public static Object getNewClassObject() {
    String name = rs.nextString();
    Object obj = null;

    try {
        obj = pool.makeClass(name).toClass().newInstance();
    } catch (Exception e) {
        throw new RuntimeException(e);
    }

    return obj;
}

RandomString 来自这里:How to generate a random alpha-numeric string?

pom.xml

<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.27.0-GA</version>
</dependency>