快速业务通道

Java.next:第二部分——与Java的互操作 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
幻泡影露电

在JRuby的例子中,我依照Ruby的命名方式来使用Java方法名:

# Ruby frame.content_pane

Java程序员习惯Camel命名方式。为了便利,JRuby同时支持这两种命名方式:

# Groovy, Scala, or JRuby frame.contentPane

由于Ruby语言的灵活性,鼓励试验不同的语法与Java交互,可以参看JRUBY-903以了解相关历史。如果想了解更符合JRuby习惯用法的Swing使用方式,可以看Profligacy项目。

结论:在JRuby中,与Java互操作很简单。

Clojure的实现

这儿是Clojure的版本:

; Clojure ; Clojure (import ''(javax.swing JFrame JButton JOptionPane)) (import ''(java.awt.event ActionListener)) (let [frame (JFrame. "Hello Swing")    button (JButton. "Click Me")] (.addActionListener button   (proxy [ActionListener] []    (actionPerformed [evt]     (JOptionPane/showMessageDialog nil,       (str "<html>Hello from <b>Clojure</b>. Button "         (.getActionCommand evt) " clicked."))))) (.. frame getContentPane (add button)) (doto frame   (setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)   pack   (setVisible true)))

Clojure是一种Lisp方言,因此其语法与其它几种有着本质上的不同。这一点就得花上几个小时来讨论,但我们现在的焦点是与Java的互操作,所以我将这一点留给这系列以后文章来讨论。现在,让我们把注意力放到与Java互操作上来。

导入Java类是件很容易的事。import之后跟着一串参数,第一项是package,其余的是要导入到当前名字空间的class。注意,这样允许我们在一行中导入多个class。

(import ''(javax.swing JFrame JButton JOptionPane))

创建一个Java实例也很简单,使用(class. &args)的形式:

(JFrame. "Hello Swing")

有多种途径来调用Java类中的方法。你可以使用(.methodName obj &args)的方式来调用单个方法。对于静态方法,使用(class/method &args)的方式:

(JOptionPane/showMessageDialog nil "A message")

在Java中,可以通过x.y().z()的方式使用链式调用。在Clojure中你可以使用(.. x (y) (z))的方式:

(.. frame (getContentPane) (add button))

最后的三个方法调用都是在frame对象上。使用Clojure的doto,你能够在一个对象上执行多次操作并避免每次都要重写这个对象:

(doto frame   (setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)   pack   (setVisible true)))

与其它几个例子一样,事件******是最有趣的部分。在Clojure中,proxy能够动态创建Java实例,并允许你实现所需的接口与方法。

(proxy [ActionListener] []   (actionPerformed [evt] {do stuff here...}))

同JRuby一样,相对Groovy这个解决方案更具有普适性,同时需要使用更多的语法。同样,你能够构建自己的语法结构。

结论:在Clojure中与Java互操作很简单。

结论

在上面的例子中,我演示了Java.next可以方便的与Java互操作。每一个例子都使用了比Java更少的代码来操作Swing库。更重要的是,Java.next的版本抓住了问题的本质并简化了形式。

与Java的无缝衔接并不是衡量Java.next语言的首要标准,因为它们都做得很好。这里并没有体现出这些语言在复杂情形下的表现,但我认为它们与Java互操作的问题已经得到了根本的解决。

Java.next系列的前两篇文章中,我采用了接近Java语言的风格来展示Java.next语言的特性。有了这些基础,是时候去使用Java.next各自的习惯用法了。在本系列文章接下来的部分,我们将会看到Java.next语言如何支持领域特定语言。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号