我遇到过需要从表中动态选取实现接口(interface)的类的情况。该类的绝对路径将在表中配置。将从表中选取类名,然后使用反射 API 创建并执行该类的实例。
我假设当多个线程访问该程序时会创建许多实例,这可能会消耗大量内存,并且可能会对性能产生影响。我的这个假设正确吗?有什么办法可以解决我这里的情况吗?
以下是代码片段:
Class<?> c = Class.forName(dynamicClass);
ServiceValidatorInterface inst = (ServiceValidatorInterface) c.newInstance();
inst.validateService(serviceDetails);
最佳答案
无论您如何创建实例,创建实例都会占用内存,因此这与问题无关。
至于性能影响,通过 newInstance()
创建实例当然与直接调用构造函数不同,但这真的会对您产生影响吗?另外,如果您要一遍又一遍地创建同一类的实例,您可以将它们合并起来,这样它们只创建一次。您只需确保这些类是无状态的并且可以共享。
不要太急于担心性能影响。现在是 2018 年,我们拥有有史以来最强大的计算机,但人们却提前担心(通常没有理由)一些无关紧要的事情。了解某些东西是否具有可接受的性能的唯一方法是对其进行测量,除非您先编写代码,否则无法做到这一点。
关于java - 使用接口(interface)和反射 API 在运行时创建实例是 coSTLy 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49432779/