每次创建新的不同类的对象

问题描述

我要连续创建新类(特别是不同名称)的对象。

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

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

任务是我们应该在方法中编写的内容,因此每次它返回一个不同类的Object,并且程序在每行中打印不同的类名称

我尝试使用匿名类,内部类,lambdas等。但是它们都返回相同的类名。 我当前的“ lam”解决方案是在一个具有播放功能的应用程序中创建新的类文件(具有重装功能),然后使用反射库(或仅使用Java代码)加载类并获取新类的对象。

但是它要占用大量内存,而反射方法getSubTypeOf()则需要花费大量时间〜100秒,并且在一段时间后出现OutOfMemoryError。 我希望有一个更好的方法。我在想诸如卸载或释放类元数据以释放内存的事情。

解决方法

使用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>