我是Java EE的新手,当我查看已编译的代码(我找不到javax的源代码:javaee-api-6.0)时,我注意到这个类。
package javax.servlet;
import java.util.EventObject;
public class ServletContextEvent extends EventObject
{
public ServletContextEvent(ServletContext paramServletContext);
public ServletContext getServletContext();
}
然而,javax中的同一个类:javaee-api-7.0就是这个。
package javax.servlet;
import java.util.EventObject;
public class ServletContextEvent extends EventObject
{
private static final long serialVersionUID = -7501701636134222423L;
public ServletContextEvent(ServletContext source)
{
super(source);
}
public ServletContext getServletContext()
{
return (ServletContext)super.getSource();
}
}
在同一个包中也会发生ServletException(可能会有更多,因为我没有经历过每一个)。
假设Java Decompiler给了我源代码的样子,从纯java语法的角度来看,我无法理解为什么6.0类不是抽象的(或者不是接口)。
问题1。为什么6.0中的类不是抽象的或接口?
问题2。为什么在7.0中更改了实施?当用javaee-api编译代码时,人们是否意识到6.0版本会造成麻烦?
我问的原因是因为在Intellij IDEA(12.1.4)中使用javaee-web-api(与javaee-api类似,参见this)时,我实际上遇到了编译错误。错误如下所示:
Internal error: (java.lang.ClassFormatError) Absent Code attribute in method that is not native or abstract in class file javax/servlet/ServletContextEvent
所以问题3。在Intellij IDEA中有没有办法避免这种情况?
答案 0 :(得分:2)
人们是否意识到6.0版本会给你带来麻烦 用javaee-api编译代码?
是的,其中一个问题是您在运行测试时无法使用这些类。请参阅this Arquillian FAQ和Adam Bien's blog post。
有没有办法在Intellij IDEA中避免这种情况?
请参阅上面的链接。解决方案并非特定于Intellij IDEA。