2

通常,我会这样做:

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

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

但是,有没有一种方法可以做到这一点?基本上,类似于:(Window) parent.dispose();或者我是否总是需要创建一个窗口来存储我的演员表?

4

5 回答 5

12

是的:

dialog.setLocationRelativeTo((Window) caller);

如果你想调用一个被转换的值的方法,你必须把它括在一组括号中:

((Window) caller).dispose();

就我个人而言,如果这是我唯一要做的事情,我只会这样做。如果有两个或多个语句需要使用强制转换的值,那么我将使用一个显式变量,就像您在原始代码中所做的那样。

于 2012-08-29T08:09:10.613 回答
3

是的,只需将演员表包裹在另一组括号中:

((Window) parent).dispose();

虽然不是特别漂亮。

还是我总是需要创建一个窗口来存储我的演员表?

请记住,您不是在创建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 回答