类型不匹配:在 Tomcat7/Java 1.7 中无法从 <ObjectTypeX> 转换为 <ObjectTypeX>

Type mismatch: cannot convert from <ObjectTypeX> to <ObjectTypeX> in Tomcat7/Java 1.7

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

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

...其中 BlastHit 是我写的 class。

这是一个 .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吗?他们是一样的class!这是怎么回事?

我可能遗漏了一些重要的数据,欢迎向我询问更多信息。

非常感谢。

P.S。我很感激你现在真的不应该在 JSP 页中编写 scriptlet,但是......好吧,一次一个问题。

编辑:我感谢错误消息说问题出在第 26 行,但如果您删除它,那么 ArrayList<BlastHit> filtered = new ArrayList<BlastHit>(); 行就会有问题。

检查一下 1. 没有两个class同名不同包的。您可以尝试在测试中为它们加上包前缀。 2. 同一个包中可能有相同 class 的两个不同定义,但来自不同的来源(罐子)或不同的 classloader(因为你正在玩 tomcat) .

您可以尝试在正常 class 中编写相同的代码,看看它是否有效。