微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决每次创建新的不同类的对象

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

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>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。