Java interop errata
There are a few possibilities for improvement on this Scala Swing Example.
- Removed unnecessary semi-colons
- Inlined import
- Removed
=in main declaration (strongly advised on functions returningUnitand especially more formain) - Removed a few unnecessary parentheses
import javax.swing._ import java.awt.event.{ActionEvent, ActionListener} object HelloWorld extends JFrame("Hello Swing") { def showButtonMessage(msg: String) = JOptionPane.showMessageDialog(null, String.format("""<html>Hello from <b>Scala</b>. Button %s pressed""", Array(msg))); def main(args: Array[String]) { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) val button = new JButton("Click Me") button.addActionListener((e:ActionEvent) => showButtonMessage(e.getActionCommand.toString)) getContentPane add button pack setVisible(true) } implicit def actionPerformedWrapper(func: (ActionEvent) => Unit) = new ActionListener { def actionPerformed(e:ActionEvent) = func(e) } }
August 13th, 2008 at 6:46 pm
Hi Tony
Could you explain what difference the equals sign makes in a function definition and why it is strongly advised to remove when returning Unit.
Thanks
Jeff
August 15th, 2008 at 8:31 am
Hi Jeff,
When you omit
=, the method is guaranteed to be of the typeUnit. This puts an additional type-check in place so that you don’t do something like callList.removeas the last statement expecting it to be a side-effect.It becomes more important for
main, since you have no type checks in place at the call site. You’ll just get a runtime error instead (no such method main).