Groovy學習筆記(二)—— 從Java到Groovy


之前就有說過,很多人之所以選擇Groovy就是因為其學習成本低,只要你有Java的基礎,學起來相當快。與此對比的是Scala(另一種JVM動態語言)語法就比較難學(雖然還沒學過,但是網上的評論是這樣的)。

作為一個Java程序員,我要逐漸把自己Groovy。

 

從JDK到GDK

1、JDK作為Java開發的核心,是所有Java程序員都需要學習和使用的部分。Groovy在設計GDK的時候非常貼心貼心貼心(重要的感情抒發三遍),GDK可以認為是JDK的擴展和超集,很多Java API在GDK里你都可以找到,甚至是Java文件都可以用Groovy編譯運行,這為混合使用Java和Groovy提供了極大的便利,Java程序員可以以極低的代價來嵌入Groovy代碼,擴展Java,提高編寫效率。

2、Groovy與Java的血緣佐證

1 def str = "I'm a String"
2 println str.class.name

運行結果:

1 java.lang.String
2 [Finished in 0.7s]

可以看出,Groovy中的對象其實就是Java對象,雖然它可能已經被擴展了。

再來一個例子:

1 def num = 3
2 num.upto(5){println "$it"}
3 println num.class.name

運行結果:

1 3
2 4
3 5
4 java.lang.Integer
5 [Finished in 0.7s]

Groovy擴展了Integer,加入了upto()方法。

 

Groovy是輕量化的Java(各種省)

再次重申這一點,主要是因為在學習Groovy的過程中,經常會有這樣的感嘆“唉,這個竟然不需要做了”又或者是“這個竟然可以這么簡單的寫!”,其輕量、快捷的特點體現在許多方面。

1、安全導航操作符(?.)

Java里充斥着if (obj != null){obj.doSomething();}的代碼,但是在Groovy里,僅需obj?.doSomething()。瞬間感覺Java弱爆了~

2、分號可省,引用可以不具名(用def就可以了)

3、不想catch就不用處理異常,而不是Java里被throws逼的必須寫

4、return也可以省

5、getter、setter也省了,類似car.engine其實是調用car.getEngine()

6、具名參數(再也不用記住參數順序了)

7、多賦值(感覺學的python,不需要為了返回多值而建個莫名其妙的類了)

8、通過使用as和asType,代碼塊可以直接作為接口的實現被傳入

9、更便捷的循環 例如for(i in 0..100){}

10、靜態導入,導入靜態方法(類似於python,可以使用as創建別名),直接通過方法名引用

11、編譯時不進行類型檢查的范型(Groovy只會在運行時推斷,推斷失敗了就拋異常)

12、類似於lombok的注解

13、操作符重載(在設計DSL的時候超級有用)

 

好吧,Groovy也有我討厭的部分(學到目前而言)

1、布爾值的求解

不同類型的規則竟然還不一樣,比如Collection非空為true,Number不為0等等。隱式就是災難啊!誰知道動態運行時莫明奇妙的拿了個什么類型的對象拿去判斷,計算布爾值。

 

Groovy設計者給Java程序員挖的坑:

1、Groovy中的==等於Java中的equals()方法,Java中的==用來判斷引用是否相同,在Groovy中對應is()方法

2、Java代碼中如果變量名為it這樣的Groovy關鍵字,會報錯。

 

簡單總結下,除了一小部分不同外,Groovy的語法與Java極為相似,相互的兼容性很好;Groovy就是Java的動態擴展。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM