ここにいる人の多くが、関数パラメーターを final にする必要があると既に言っています。
public DragManager(final Canvas canvas)
{
canvas.addMouseListener(new MouseAdapter() {
@Override public void mousePressed(MouseEvent e)
{
canvas.something();
}
});
}
つまり、この変数は他のオブジェクトを指すことができません。たとえば、関数内でこれを行うことはできません。
canvas = SomeOtherCanvas
ローカル クラス定義を使用してオブジェクトを作成する場合、そのオブジェクトは、ローカル変数がスタックから破棄された後 (DragManager
コンストラクターの完了後) に「存続」し続けることができます。ローカル値のコピーが必要です。このパラメーターを final にすると (コンストラクター内の参照が他の場所を指していないことが保証されます)、コピーを作成するのは非常に簡単になります。参照をコピーするだけです。そのようなルールがなければ、あなた (個人的にではなく、Java 言語) はこれらの値を常に同期する必要があり、それははるかに複雑で遅い解決策になります。