当前位置: 首页 > 面试题库 >

Java EL通过整数键访问映射值

娄阳舒
2023-03-14
问题内容

我有一个以整数为键的地图。使用EL,如何通过其键访问值?

Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "One");
map.put(2, "Two");
map.put(3, "Three");

我以为这可以工作,但是不行(请求的属性中已经有map了):

<c:out value="${map[1]}"/>

跟进:我找到了问题所在。显然${name[1]}使用数字作为进行地图查找Long。当我更改HashMapTreeMap并收到错误时,我发现了这一点:

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long

如果我将地图更改为:

Map<Long, String> map = new HashMap<Long, String>();
map.put(1L, "One");

然后${name[1]}返回“一个”。那是什么 为什么<c:out>将数字视为长号。对我来说似乎违反直觉(因为int比long更常用)。

所以我的新问题是,是否有一个EL表示法可通过Integer值访问映射?


问题答案:

如本Java论坛主题所述:

基本上,自动装箱会将Integer对象放入Map中。即:

map.put(new Integer(0), "myValue")

EL(表达式语言)将0评估为Long,因此在地图中寻找Long作为键。即它评估:

map.get(new Long(0))

由于a Long永远不等于Integer对象,因此不会在地图中找到该条目。
简而言之就是这样。

EL 2.2与JSP 2.2 / Java EE 6一起推出,与EL 2.1相比有一些区别。
似乎(“ EL表达式将整数解析为长 ”)是:

你可以在EL 2.2内部intValue的Long对象self 上调用该方法:

<c:out value="${map[(1).intValue()]}"/>


 类似资料:
  • 要 动态获取一个对象方法的信息,首先需要通过下列方法之一创建一个 类型的对象或者数组。 getMethods() getMethods(String name,Class<?> …parameterTypes) getDeclaredMethods() getDeclaredMethods(String name,Class<?>...parameterTypes) 如果是访问指定的构造方法,需要

  • 问题内容: 在具有并发访问的程序中使用映射时,是否需要在函数中使用互斥体来 读取 值? 问题答案: 读者众多,没有作家可以: https://groups.google.com/d/msg/golang- nuts/HpLWnGTp-n8/hyUYmnWJqiQJ 一个作家,没有读者是可以的。(否则,地图不会太好。) 否则,如果至少有一个作家,而作家或读者至少还有一个,那么 所有 读者 和 作家都

  • 问题内容: 示例代码: 问题行: 错误: 题: 那么,如何访问该界面内的键? 我是否需要使用方法集定义更复杂的接口来完成此操作? 问题答案: 由于您的分片类型为,因此索引该分片将为您提供type的元素。类型的值无法建立索引。 但是由于您将类型的值放入其中,因此可以使用类型断言来获取该映射类型的值,您可以对其进行正确索引: 输出(在Go Playground上尝试): 如果您知道总是将类型的值存储在

  • 问题内容: 这是一个测试类: 这是我的输出: 我缺少通过反射使注释可见的什么? 我是否仅需要检查它们的存在就需要注释处理器? 问题答案: 为了在运行时访问注释,它需要具有运行时的保留策略。 否则,注释将被丢弃,并且JVM无法识别它们。 有关更多信息,请参见此处。

  • 通过下列任意一个方法访问成员变量时将返回 Field 类型的对象或数组。 getFields() getField(String name) getDeclaredFields() getDeclaredField(String name) 上述方法返回的 Field 对象代表一个成员变量。例如,要访问一个名称为 price 的成员变量,示例代码如下: Field 类的常用方法如表 1 所示 表1

  • 为了能够 动态获取对象构造方法的信息,首先需要通过下列方法之一创建一个 类型的对象或者数组。 getConstructors() getConstructor(Class<?>…parameterTypes) getDeclaredConstructors() getDeclaredConstructor(Class<?>...parameterTypes) 如果是访问指定的构造方法,需要根据该构