我在以下行遇到一个奇怪的错误:

ArrayList<BlastHit> filtered = new ArrayList<BlastHit>();


...其中BlastHit是我编写的课程。

该文件位于.jsp文件中,由Tomcat 7在Ubuntu上使用Java 1.7执行。

完整的堆栈跟踪为:

org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 26 in the jsp file: /results.jsp
Type mismatch: cannot convert from java.util.ArrayList<BlastHit> to java.util.ArrayList<BlastHit>
23: ArrayList<BlastHit> filtered = new ArrayList<BlastHit>();
24: try {
25:     blastResults = new BlastResults(json);
26:     filtered = Blast.filterBySpecies(blastResults.getHits(), request.getParameterValues("species"));
27: } catch (Exception e) {
28:     blastResults = new BlastResults();
29:     filtered = new ArrayList<BlastHit>();


An error occurred at line: 58 in the jsp file: /results.jsp
The method makeHitHTML(BlastHit) in the type Blast is not applicable for the arguments (BlastHit)
55:             out.println("No hits found");
56:         }
57:         for (int i = 0; i < filtered.size(); i++) {
58:             out.println(Blast.makeHitHTML((BlastHit)filtered.get(i)));
59:         }
60:     }
61:     %>


Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:366)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:468)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:657)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)


它不是从本质上告诉我它不能从类型BlastHit转换为类型BlastHit吗?他们是同一个班级!这里发生了什么?

我可能省略了一些重要的数据,请随时向我询问更多信息。

非常感谢。

附言我很高兴您现在不应该在JSP页面中编写scriptlet,但是……一次,一个问题。

编辑:我很欣赏错误消息说问题在第26行,但是如果您删除它,则ArrayList<BlastHit> filtered = new ArrayList<BlastHit>();行有问题。

最佳答案

检查一下
1.没有两个具有相同名称的类,但位于不同的包中。您可以尝试在测试中为它们加上包的前缀。
2.在同一个包中,可能有两个不同的同一个类定义,但是它们来自不同的源(jar)或不同的类加载器(因为您正在使用tomcat)。

您可以尝试在普通的类中编写相同的代码,看看是否可行。

07-24 19:58