gpt4 book ai didi

java - 类型不匹配 : cannot convert from HashMap 到 HashMap

转载 作者:行者123 更新时间:2023-12-02 09:22:07 27 4
gpt4 key购买 nike

我正在尝试在 JSP 中使用这段代码来循环 Hashmap。当jsp加载时

    HashMap<Integer, Item> itemsMap = new HashMap<Integer, Item>();
itemsMap = customer1.getItems();
for(Map.Entry<Integer, Item> entry:itemsMap.entrySet()){
Integer k=entry.getKey();
Item item=entry.getValue();
}

这是我尝试加载 jsp 时显示的错误

    org.apache.jasper.JasperException: Unable to compile class for JSP: 
An error occurred at line: 159 in the jsp file: /JSP/cart.jsp
Type mismatch: cannot convert from HashMap<Integer,Item> to HashMap<Integer,Item>
156: // HashMap itemsMap = customer1.getItems();
157: // for(Iterator i = itemsMap.keySet().iterator();i.hasNext();){
158: HashMap<Integer, Item> itemsMap = new HashMap<Integer, Item>();
159: itemsMap = customer1.getItems();
160: for(Map.Entry<Integer, Item> entry:itemsMap.entrySet()){
161: Integer k=entry.getKey();
162: Item item=entry.getValue();

当我出于相同目的在 servlet 中使用相同的代码时,它工作得很好。有人能告诉我我在这里做错了什么吗?谢谢。

这些是相关的类:

public class Customer {
private String name;
private String address;
// private ArrayList<Item> items = new ArrayList<Item>();
private HashMap<Integer,Item> items=new HashMap<Integer,Item>();
public Customer() {

}
public HashMap<Integer,Item> getItems(){ return items;}
}

public static class Item {
private String name;
private String skew;
private String amount;
public Item(String name, String skew, String amount) {
this.name=name; this.skew=skew; this.amount=amount;
}
}

最佳答案

根据您使用的应用程序服务器,您可以检查从 JSP 文件生成的 Java 文件。例如,在 Tomcat 中,它位于“工作”目录树中的某个位置。当您在调试器 session 中右键单击 JSP 文件并单击上下文菜单中的“显示 Servlet”之类的内容时,某些 IDE 还可以为您打开它。请注意,当您在调试器 session 之外时,这不可能起作用。

打开此文件后,您可以检查导入和其他所有内容以及它无法编译的原因。

用户 Zircon 关于“Item”类型以及它是否是 JSP 中的导入之一的评论可能是正确的。我并不担心缺少导入,而是担心您的应用程序的设计。分离业务逻辑和显示逻辑是 Web 开发中非常严格的惯例。换句话说:在任何情况下都不应在 JSP 中包含 Java 代码。所有业务逻辑(这就是您的 Java 代码应该涉及的内容)都应该封装在 Controller 和模型中,或者,如果您愿意,也可以封装在从 JSP 中实例化的 bean 中。如果您想迭代某些内容,请使用 <c:forEach >和类似的规定。

如果您坚持在 JSP 中使用 Java,那么至少使用菱形运算符:HashMap<Integer, Item> itemsMap = new HashMap<>();

这样,问题可能会产生更具启发性的编译器或运行时消息。

如果这一切都没有帮助,那么请真正找到应用程序服务器从 JSP 创建的 servlet 文件(.java 文件),并将导入部分复制到您的问题中,以便我们知道它正在尝试访问哪种类型的项目。

关于java - 类型不匹配 : cannot convert from HashMap<Integer, Item> 到 HashMap<Integer,Item>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44053822/

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