Java Spring HttpStatus.valueOf似乎效率低下?
Valueof方法在代码上循环,这在我看来效率很低。我错过什么了吗Java Spring HttpStatus.valueOf似乎效率低下?,java,spring,spring-boot,spring-mvc,Java,Spring,Spring Boot,Spring Mvc,Valueof方法在代码上循环,这在我看来效率很低。我错过什么了吗我正在使用spring 4.2.5 public static HttpStatus valueOf(int statusCode) { for (HttpStatus status : values()) { if (status.value == statusCode) { return status; }
我正在使用spring 4.2.5
public static HttpStatus valueOf(int statusCode) {
for (HttpStatus status : values()) {
if (status.value == statusCode) {
return status;
}
}
throw new IllegalArgumentException("No matching constant for [" + statusCode + "]");
}
你的困惑是什么?你可以问我。foreach in values(),当statusCode等于
打破循环并返回。我不确定您到底在问什么,但与较新版本的Spring相比,是的,有一些修改,但逻辑保持不变 在Spring 5.1.7中,它看起来像这样 提及
这里的
resolve
方法看起来像OP的valueOf
方法的反编译版本。换句话说,不同版本之间没有什么真正的变化。他们添加了一个resolve
方法,当找不到常量时,该方法返回null而不是抛出异常,但在其他方面,搜索代码完全相同。只有大约60个枚举常量。与应用程序正在做的其他事情(例如,联网)相比,执行循环所需的时间可能微不足道。其实也没有别的办法。我想你可以试试地图,但我不知道这是否真的会更快,你需要配置/基准测试。
public static HttpStatus valueOf(int statusCode) {
HttpStatus status = resolve(statusCode);
if (status == null) {
throw new IllegalArgumentException("No matching constant for [" + statusCode + "]");
}
return status;
}
@Nullable
public static HttpStatus resolve(int statusCode) {
for (HttpStatus status : values()) {
if (status.value == statusCode) {
return status;
}
}
return null;
}