gpt4 book ai didi

java - 在大容量应用程序中使用 Class.forName(...) 是否会导致性能下降?

转载 作者:行者123 更新时间:2023-12-01 12:57:30 24 4
gpt4 key购买 nike

这就是我正在尝试做的事情。我有一个网络服务,最终调用一个简单的调度程序。调度程序根据请求实例化该特定类型请求的处理程序。所有处理程序都实现相同的接口(interface)。

我正在努力解决的问题是调度程序实例化处理程序的最佳方式。

我有两个解决方案:

  1. 使用映射,其中键为场景(与请求中的相同),值为字符串来查找类。

    scenarios = new HashMap<String, String>();
    scenarios.put("A", "com.xyz.handlers.ScenarioAHandler");

    然后这样做:

    handlerClass = Class.forName(scenarios.get(scenario));
    handler = (HandlerInterface) handlerClass.newInstance();
  2. 我的另一个解决方案是仅使用该值的类。

    scenarios = new HashMap<String, Class>();
    scenarios.put("A", ScenarioAHandler.class);

    然后我可以这样做来获取处理程序的实例:

    handler = (HandlerInterface) this.scenarios.get(scenario).newInstance();

其中一个比另一个更好,还是有我尚未考虑的更好的解决方案?

最佳答案

第二种情况要快一些,因为它不必执行“如果未加载此类,则加载类”代码(请参阅 Class.java 中的 forName 方法)。但正如 Sajan Chandran 所说,工厂会更快、更安全:

public class HandlerFactory {

private HandlerFactory() {}

public static HandlerInterface getHandler(String scenario) {

HandlerInterface handler = null;

// switch is just as fast as HashMap lookup.
switch(scenario) {

case "A": handler = new ScenarioAHandler(); break;
case "B": handler = new ScenarioBHandler(); break;

default: throw new IllegalArgumentException("No handler defined for scenario " + scenario);

}
return handler;
}
}

关于java - 在大容量应用程序中使用 Class.forName(...) 是否会导致性能下降?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23762328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com