私はservlets
を勉強しています。私は教授が作成した完全な実例を見ていました。私のサーブレットのservice()
方法は、次のようになります。上記の例service()
でjarアーカイブのJavaインターフェイス
public void service (ServletRequest req, ServletResponse res)
throws ServletException, IOException {
res.setContentType("text/plain");
PrintWriter out = res.getWriter();
out.println("Some response");
out.close();
}
がServletResponse
オブジェクトを使用していますので、私は私のservlet-api .jar
に入った、javax.servlet.ServletResponse.class
を検索しServletResponse.class
はインタフェース(public abstract interface javax.servlet.ServletResponse
)であることが分かりました。だから私のコードでは、タイプServletResponse
のオブジェクトをインターフェイスとして使用していますが、Javaでインターフェイスをインスタンス化できないと思っていました。私はまた、このインターフェイスがServletResponseWrapper.class
によって実装されていることに気づいた。
だから私の質問は以下のとおりです。
- なぜコンパイラは、私はインターフェイスをインスタンス化させていますか?
- なぜServletResponseWrapperオブジェクトを使用しないのですか?
あなたはそれを発症しますか?初期コードを表示してください。 – MordechayS
匿名クラスを使用すると、インスタンス化できます。それ以外の場合は、そのインタフェースを実装しているクラスをインスタンス化し、それにキャストすることができます(ポリモーフィズム)。 'List' - >' List myList = new ArrayList(); ' – Pau
サーブレットコンテナはコンテナのオブジェクトを渡します'ServletResponse'インターフェースを実装する特定のクラスです。あなたが知る必要があるのは、それがインターフェースを実装していることだけです。 – Henry