Java 为什么getHeaderNames在HttpServletRequest中返回枚举,而在HttpServletResponse中返回集合?
返回Java 为什么getHeaderNames在HttpServletRequest中返回枚举,而在HttpServletResponse中返回集合?,java,jakarta-ee,servlets,Java,Jakarta Ee,Servlets,返回枚举并返回集合 为什么会出现这种差异?这可能只是因为请求方法是在将Collections API添加到java之前实现的(我认为是在java 1.2中)。这是对java的一个重大改进,大量java API都建立在它之上。然而,java API以前的一些部分是在枚举、向量(在向量实现之前java.util.List)等基础上构建的。。。为了兼容性,它一直保持这种方式。在第一种情况下,您只需获得值。在第二步中,您将获得一个可以修改的集合的引用 他们在文件中规定: 对返回的集合的任何更改不得影响此
枚举
并返回集合
为什么会出现这种差异?这可能只是因为请求方法是在将Collections API添加到java之前实现的(我认为是在java 1.2中)。这是对java的一个重大改进,大量java API都建立在它之上。然而,java API以前的一些部分是在
枚举
、向量
(在向量实现之前java.util.List
)等基础上构建的。。。为了兼容性,它一直保持这种方式。在第一种情况下,您只需获得值。在第二步中,您将获得一个可以修改的集合的引用
他们在文件中规定:
对返回的集合的任何更改不得影响此HttpServletResponse
因此,它应该被修改,但修改不应该影响响应。枚举与哈希表和向量结合使用。HttpServletRequest自JDK1.2以来就具有getHeaderNames方法,并且此后未被更改
然而,HttpServletResponse直到jdk 6才有getHeaderNames方法,到那时,集合显然比遗留枚举更受欢迎。请求方法已在java版本1.2中实现。
虽然收集的数据来自jdk 6
因此,随着java技术的进步,他们已经使用了两种不同的东西:收集和枚举
如果您看到响应标头值,那么如果我们修改集合,它们将不会发生任何更改。这是一个很好的问题,因为HttpServletRequest似乎不太可能知道每个可能的标头,基于规范和特定于框架。我知道它不能完全解释应该做什么,但它显示了设计上的差异,所以它不是要修改的。@EJP我也这样理解,但公式非常奇怪。他们可以说它不应该被修改。相反,他们说它可以但没有效果。这可能是公式中的错误,也可能是作者有什么想法。