我在以下行遇到一个奇怪的错误:
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)。
您可以尝试在普通的类中编写相同的代码,看看是否可行。