类型不匹配:在 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 中编写相同的代码,看看它是否有效。
我在以下行遇到了一个奇怪的错误:
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 中编写相同的代码,看看它是否有效。