2

通常、私は次のようなことをします。

public showDialog(final Object caller) {
    JDialog dialog = [ ... ]

    if (caller instanceof Window) {
        Window w = (Window) caller;
        dialog.setLocationRelativeTo(w);
        w.dispose();
    }
}

しかし、それを行うための1行の方法はありますか?基本的に、次のようなものです。(Window) parent.dispose();または、キャストを保存するためのウィンドウを常に作成する必要がありますか?

4

5 に答える 5

12

はい:

dialog.setLocationRelativeTo((Window) caller);

キャストされた値に対してメソッドを呼び出したい場合は、それを一連の括弧で囲む必要があります。

((Window) caller).dispose();

個人的には、それが私がそれで行う唯一のことである場合にのみ、それを行います. キャストで値が必要なステートメントが 2 つ以上ある場合は、元のコードで行ったように、明示的な変数を使用します。

于 2012-08-29T08:09:10.613 に答える
3

はい、キャストを別の括弧のセットでラップするだけです:

((Window) parent).dispose();

特に美しいわけではありませんが。

または、キャストを保存するために常に Window を作成する必要がありますか?

を作成するのではなく、すでに持っているWindowへの参照を作成していることに注意してください (これは非常に安価です)。Window

于 2012-08-29T08:10:07.700 に答える
3

あなたは書ける

if (caller instanceof Window) {
    dialog.setLocationRelativeTo((Window) caller);
    ((Window) caller).dispose();
}

より明確なことを行い、行数についてあまり心配しないことをお勧めします。

于 2012-08-29T08:10:08.243 に答える
1

もちろんできます。あなたの3行は次のようになります。

dialog.setLocationRelativeTo((Window) caller);
((Window) caller).dispose();
于 2012-08-29T08:09:19.180 に答える
1

明確にするために、私はしばしばわずかに異なる方法でキャストします

dialog.setLocationRelativeTo(Window.class.cast(caller));
Window.class.cast(caller).dispose();

これは、読者にあなたが何をしているのかを明確に伝えていると思います。() キャスト構文は一般的に知られていますが、イディオムは特定の Java の知識に依存していると思います。

于 2012-08-29T08:48:58.257 に答える