我试图实现与http://www.codecommit.com/blog/scala/scala-for-java-refugees-part-6中的高阶函数示例类似的代码。
val button = new JButton("test")
button.addActionListener{ e:ActionEvent => println("test") }
add(button)
导致以下结果。
error: type mismatch;
found : (java.awt.event.ActionEvent) => Unit
required: java.awt.event.ActionListener
button.addActionListener{ e:ActionEvent => println("test") }
^
至少在我的系统上,使用Scala编译器版本2.7.6.final是正确的。我能够以Java风格显式地实现匿名ActionListener来达到我想要的效果。
button.addActionListener( new ActionListener() {
def actionPerformed(e:ActionEvent) { println("test") }
})
据我了解,Scala应该能够使用鸭子类型来渲染这个ActionListener的显式实现不必要;那么为什么在这里它没有起作用呢?在这一点上,我几乎没有任何实际经验。