Fedora10でHelloWorld.javaをコンパイルすると、エラーが発生します。エラーメッセージは「The serializable class HelloWorld does not declare a static final serialVersionUID field of type long」と表示されます。
すると以下のようにエラーがでます。
何が原因でしょうか?
/root/HelloWorld.java:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hello World!</h1>");
out.println("</body>");
out.println("</html>");
}
}
[root@prime ~]# javac -classpath /usr/share/tomcat6/lib/tomcat6-servlet-2.5-api-6.0.18.jar HelloWorld.java
----------
1. WARNING in HelloWorld.java (at line 5)
public class HelloWorld extends HttpServlet {
^^^^^^^^^^
The serializable class HelloWorld does not declare a static final serialVersionUID field of type long
----------
1 problem (1 warning)
[root@prime ~]#
ただし、
/usr/share/tomcat6/lib/tomcat6-servlet-2.5-api-6.0.18.jar
に使用したapiクラスは含まれています。
The serializable class HelloWorld does not declare a static final serialVersionUID field of type long
の意味を教えてください。
文字通り、static final serialVersionUIDがない、という意味。現在のJavaでは、Beanとして定義されるクラス(=シリアライズ可能なクラス)はserialVersionUIDを用意する必要がある。
public class HelloWorld extends HttpServlet { のすぐ下に、
private static final long serialVersionUID = 1L;
といった感じでserialVersionUIDの値を設定するprivateフィールドを追加して再度試してみる。
お礼
ありがとうございます。 解決しました。