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

无法使用修饰符“ public final”访问java.util.HashMap $ Entry

蓝星辰
2023-03-14
问题内容

我的问题是,我的应用程序可以在Tomcat服务器上本地正常运行,但是在安装了glassfish的服务器上会引发错误。整个问题是我要遍历JSTL中的HashMap。服务器抛出一个堆栈,如下所示:

Servlet.service() for servlet jsp threw exception java.lang.IllegalAccessException:
Class javax.el.BeanELResolver can not access a member of class java.util.HashMap$Entry with modifiers "public final" 
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:95) 
at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:261) 
at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:253)

问题是由代码引起的:

<c:forEach items="${element.getPreparedParameters()}" var="parametr" varStatus="j">
    documents["${i.index}"]["param"]=new Array();
    documents["${i.index}"]["param"]["key"] = "${parametr.getKey()}";
    documents["${i.index}"]["param"]["value"] = "${parametr.getValue()}";
</c:forEach>

哪里element.getPreparedParameters()退货HashMap

我该如何运作?


问题答案:

查看针对Java
1.2向Sun报告的这个已存在数十年的bug。我记得以前曾见过此错误,并且消息令人误解:问题不在于方法修饰符,而在于所属类上的修饰符。即,Map.Entry是一个公共接口,但是其中的实现类HashMap是私有的。反射不允许您访问类的方法,即使您正在访问实现公共接口的方法也是如此。

我建议您采用一种便宜的解决方法:不要在上进行迭代entrySet,而是在上进行迭代,而不是keySet使用。map.get(key)``entry.getValue()



 类似资料:
  • 主要内容:私有(Private)成员,实例,保护(Protected)成员,实例,公共(Public)成员,实例,作用域保护,实例Scala 访问修饰符基本和Java的一样,分别有:private,protected,public。 如果没有指定访问修饰符,默认情况下,Scala 对象的访问级别都是 public。 Scala 中的 private 限定符,比 Java 更严格,在嵌套类情况下,外层类甚至不能访问被嵌套类的私有成员。 私有(Private)成员 用 private 关键字修饰,带

  • 根据留档(http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html)的第二个表,没有标识符的成员对子类不可见。 但是,当我运行下面的示例代码时,“1”(b的内容)被打印出来! 如果没有访问修饰符的成员不能从子类访问,那么为什么在本例中打印它 它应该抛出一个错误,就像在私有访问修饰符中一样,不是吗?

  • 本文向大家介绍VBA 访问修饰符,包括了VBA 访问修饰符的使用技巧和注意事项,需要的朋友参考一下 示例 该Dim语句应保留用于局部变量。在模块级别,首选显式访问修饰符: Private 对于私有字段,只能在声明它们的模块中访问。 Public 用于公共字段和全局变量,可以通过任何调用代码进行访问。 Friend 用于项目内公共变量,但其他引用VBA项目无法访问(与加载项相关) Global也可以

  • 我想如果一个类被声明为public,它可以从任何地方访问。但是为什么eclipse称之为错误呢?

  • Scala 访问修饰符基本和Java的一样,分别有:private,protected,public。 如果没有指定访问修饰符符,默认情况下,Scala 对象的访问级别都是 public。 Scala 中的 private 限定符,比 Java 更严格,在嵌套类情况下,外层类甚至不能访问被嵌套类的私有成员。 私有(Private)成员 用 private 关键字修饰,带有此标记的成员仅在包含了成员

  • 本章将指导您完成Scala访问修饰符。 包,类或对象的成员可以使用访问修饰符私有和受保护标记,如果我们不使用这两个关键字中的任何一个,则访问将被假定为公共访问。 这些修饰符限制对成员到某些代码区域的访问。 要使用访问修饰符,请在包,类或对象的成员定义中包含其关键字,我们将在下一节中看到。 私人会员 私有成员仅在包含成员定义的类或对象内可见。 以下是解释私人会员的示例代码段 - 例子 (Exampl