Java 中匿名代码块有实际用途吗?
public static void main(String[] args) {
// in
{
// out
}
}
请注意,这与 命名 块无关,即
name: {
if ( /* something */ )
break name;
}
.
原文由 Robert Munteanu 发布,翻译遵循 CC BY-SA 4.0 许可协议
Java 中匿名代码块有实际用途吗?
public static void main(String[] args) {
// in
{
// out
}
}
请注意,这与 命名 块无关,即
name: {
if ( /* something */ )
break name;
}
.
原文由 Robert Munteanu 发布,翻译遵循 CC BY-SA 4.0 许可协议
@David Seiler 的回答是正确的,但我认为代码块非常有用,应该经常使用,并不一定表示需要分解到方法中。我发现它们对于构建 Swing 组件树特别有用,例如:
JPanel mainPanel = new JPanel(new BorderLayout());
{
JLabel centerLabel = new JLabel();
centerLabel.setText("Hello World");
mainPanel.add(centerLabel, BorderLayout.CENTER);
}
{
JPanel southPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0,0));
{
JLabel label1 = new JLabel();
label1.setText("Hello");
southPanel.add(label1);
}
{
JLabel label2 = new JLabel();
label2.setText("World");
southPanel.add(label2);
}
mainPanel.add(southPanel, BorderLayout.SOUTH);
}
代码块不仅尽可能严格地限制了变量的范围(这总是好的,尤其是在处理可变状态和非最终变量时),而且它们还以 XML / HTML 制作的方式说明了组件层次结构代码更易于阅读、编写和维护。
我将每个组件实例分解为方法的问题是
在这个 Swing 示例中,我发现当复杂性确实变得超出可管理性时,它表明是时候将树的一个分支分解为一个新类而不是一堆小方法了。
原文由 Stephen Swensen 发布,翻译遵循 CC BY-SA 3.0 许可协议
4 回答1.5k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
2 回答749 阅读✓ 已解决
2 回答1.8k 阅读
2 回答1.7k 阅读
2 回答1.3k 阅读
他们限制变量范围。
但在实践中,如果您发现自己使用这样的代码块,这可能表明您想要将该块重构为一个方法。