如何解决每次创建新的不同类的对象
我要连续创建新类(特别是不同名称)的对象。
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 举报,一经查实,本站将立刻删除。