我可以在一行上投射和使用对象吗?

时间:2012-08-29 08:07:35

标签: java syntax

通常情况下,我会这样做:

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

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

但是,有一种单行方式吗?基本上,像:(Window) parent.dispose();或者我是否总是需要创建一个窗口来存储我的演员?

5 个答案:

答案 0 :(得分:11)

是:

dialog.setLocationRelativeTo((Window) caller);

如果要在铸造值上调用方法,则必须将其括在一组括号中:

((Window) caller).dispose();

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

答案 1 :(得分:3)

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

((Window) parent).dispose();

虽然不是特别漂亮。

  

或者我是否总是需要创建一个窗口来存储我的演员?

请注意,您未创建Window - 您正在创建对已有Window的引用(这非常便宜)。

答案 2 :(得分:3)

你可以写

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

我建议你做更清楚的事情,不要过多担心行数。

答案 3 :(得分:1)

当然可以。你的3行将成为:

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

答案 4 :(得分:1)

为清楚起见,我经常采用略有不同的方式

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

我想明确告诉读者你在做什么。虽然()演员语法是众所周知的,但我认为习语依赖于特定的java知识。