专栏首页Java程序员的技能宝典java程序员为什么使用Groovy?
原创

java程序员为什么使用Groovy?

一直听说java世界里有个Groovy,但是一直没时间去了解它究竟是一个怎么样子的。我们现在的项目里放了很多开源包,而且项目中做流程的时候,规则就是用Groovy实现的。近来闲来无事,于是开始认真的看看Groory究竟有什么好的。其实最初我接触它是因为Grails这一个框架,这两个都是为了实现一个目的,java的敏捷开发,与java的无缝对接。在某些情况下,java需要半天处理的事情,Groovy只需要几分钟,是的,几分钟…剩下来的时间,程序员终于有时间泡妹子了,^_^…….技术宅的兄弟,赶紧来看看吧。

脚本语言,动态语言?难道是javascript一类的?好吧,它的确和javascript有一点像,但是它太强大了,远远超出了javascript能处理的事情。这里不和javascript做比较了,直接来和Java比较吧,看看Groovy能做什么。

Groovy 的网站( http://groovy.codehaus.org ) 给出了 groovy 的最好定义: groovy 是在 java平台上的、 具有象 Python , Ruby 和 Smalltalk 语言特性的灵活动态语言, groovy 保证了这些特性象 java 语法一样被 java 开发者使用。 而且学习Groovy对javaer来说,是很容易的一件事情。如果你还没有开始学Ruby,来吧,和我一起来Groovying一下…………而且附带一个Grails来媲美Ruby on rails。

1.Groovy可以兼容java。

是的,你可以用java语法来编写groovy,最后还可以生成class文件,直接用java调用。你会说,这有什么好的,不就是改了个后缀名么?呕,也许吧…但是它的亮点当然不是这个,它的亮点是你可以在Groovy里面直接用java语法混搭写,当然不是很推荐这样做的。

2.Groovy是动态的。

不需要java的反射,不需要冗长的代码,不需要各种try catch 异常,你就可以实现各种神奇的事情。Groovy的class可以这样新增一个方法,或者调用它。

//用闭包定义一个方法 var1为参数 ,->后面是执行语句(当然参数不是必须的)
def methodA={var1-> print "this is methodA"} 

//用闭包定义一个方法 var1为参数 ,->后面是执行语句(当然参数不是必须的)
def methodB={var1-> print "this is  methodB"}

String.metaClass.addMethodA=methodA;   //将methodA绑定为成员方法。
String.metaClass.'static'.addMethodB=methodB;   //将methodB绑定为静态方法

String s="str"; 
s.addMethodA('good');  //实例调用方法A 
String.addMethodB('hello'); //静态类调用方法B

以上的代码将两个方法添加到了String class里面(天哪,final的String 也被攻破了),然后分别用实例对象调用addMethodA,静态类调用AddMethodB.

3.Groovy是一把瑞士军刀。

java是一把基础工具,等你需要的时候,你需要到处去找jar包,来填充自己的程序,而且你需要看API去弄懂各种使用。此外,java的编写实在是太冗长了,为了打印一个HelloWorld,你需要编写class, 写一个main函数。对于Groovy来说:print “hello world!”.这一句就足够了,这只是开始…

通过 groovy 你能快速的打开控制台, 通过输入如下代码来输出所有的文件名 ( 递归处理 ) :

groovy -e "new File('.').eachFileRecurse { println it }"

即使 java 有一个名称为 eachFileRecurse 的方法和一个 FileListener 的接口,你仍旧需要显示的创建一个类, 声明一个 main 方法, 保存源代码到一个文件中, 并且编译它, 然后你才能运行它, 基于比较, 我们来看看 java 做相同工作的代码, 我们假设存在单独的 eachFileRecurse 方法:

public class ListFiles { // JAVA !!

public static void main(String[] args) {

 new java.io.File(".").eachFileRecurse( // 假设 java 存在该方法

 new FileListener() {

    public void onFile (File file) {
         System.out.println(file.toString()); 
        } 
    } 
); 
}

好吧,有需要《Groovy in Action[文字版][中文].pdf》可以直接私信我,现在开始学习Groovy吧。

特别声明:本文素材来源于网络,仅作为分享学习之用,如有侵权,请联系删除!


原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring官网阅读系列(五):BeanDefinition(下)

    在上篇文章中,我们学习了BeanDefinition的一些属性,其中有以下几个属性:

    秃顶的Java程序员
  • JVM性能调优总结:JVM内存模型,内存泄漏及解决方法,调优方法~

    其中New和Tenured属于堆内存,堆内存会从JVM启动参数(-Xmx:3G)指定的内存中分配,Perm不属于堆内存,有虚拟机直接分配,但可以通过-XX:Pe...

    秃顶的Java程序员
  • Java程序员,想要彻底弄懂Redis,这15点你一定要明白~(纯干货)

    Redis是一款开源的、高性能的键-值存储(key-value store)。它常被称作是一款数据结构服务器(data structure server)。

    秃顶的Java程序员
  • python---爬取某鱼直播

    用了selenium,才深刻的体会到它的好处,更加的方便更加的快捷,更容易的获取网页的信息。

    sjw1998
  • 从嗤之以鼻到“奇迹” 前淘宝工程师详解12306技术

    我曾在淘宝写过一段时间代码,2012年在一家百强民企做电商副总,当时在极为艰苦的条件下带队开发了一个B2C网站,走支付宝和银联支付通道,年营业额千万级(当然实在...

    范蠡
  • Python中的高级turtle(海龟)作图

    Zoctopus
  • Golang 基础篇

    我们使用go run运行后,会在控制台终端看到Hello, 世界的输出。我们来看下这段代码:

    爱敲代码的猫
  • ELK学习笔记之filebeat合并多行日志示例

    来自Elasticsearch等服务的活动日志通常以时间戳开始,然后是关于特定活动的信息,如下例所示:

    Jetpropelledsnake21
  • 【强烈推荐】Java工程师如何从一名普通的码农成长为一位大神

    本文源自 http://www.hollischuang.com/archives/489 写在前面 java作为一门编程语言,在各类编程语言中...

    用户1257215
  • nested exception is java.lang.ClassCastException:XXX cannot be cast to java.io.Serializable

    Type Exception Report Message Request processing failed; nested exception is ja...

    程裕强

扫码关注云+社区

领取腾讯云代金券