6

私は途方もなく大きなコードベースで作業しており、あるパッケージから別のパッケージにファイルを移動する必要があります。ただし、コードベース全体をローカルに持っているわけではないため、元のファイルへのすべての参照を見つけて更新したかどうかはわかりません。何も壊さないようにするために、元のファイルを残して、作成した新しいファイルを単純に拡張したいと思います。理想的には、両方がまったく同じ名前である必要があります。時間の経過とともに、古いファイルを非推奨にして削除する予定ですが、今のところ、これが最も堅牢なソリューションのようです。ただし、Javaで動作させる方法がわかりません。

新しいクラスは次のとおりです。

package myproject.util.http;

import javax.servlet.http.HttpServlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public abstract class MyServlet extends HttpServlet
{

    public void service (HttpServletRequest  request,
                         HttpServletResponse response)
            throws ServletException, IOException
    {
        // implementation of service
    }

}

新しいクラスを拡張する古いクラスは次のとおりです。

package myproject.util.net;

import myproject.util.http.MyServlet;

public abstract class MyServlet extends myproject.util.http.MyServlet
{
// this class was deprecated, use myproject.util.http.MyServlet instead
}

残念ながら、次のエラーが表示されます。

MyServlet is already defined in this compilation unit

これは可能ですか、それとも親クラスの新しい名前を考え出す必要がありますか?

4

3 に答える 3

7

実行できますが、importステートメントを削除する必要があります。

そうしないと、コンパイル ユニットはパッケージで宣言されたすべてのクラスを完全修飾名なしで使用するようにインポートします。これは、2 つの を区別できないことを意味しますMyServlet。これが違法である理由です。

于 2013-03-01T00:25:02.227 に答える
1

インポートを削除して完全修飾名を付けるだけですmyproject.util.http.MyServlet

于 2013-03-01T00:24:18.263 に答える
0

import ステートメントを削除するだけで、すべてがうまくいきます。

于 2013-03-01T00:23:39.917 に答える