亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Groovy與Java的不同點

2019-11-06 07:02:23
字體:
來源:轉載
供稿:網友

本文參考自Groovy文檔 Differences with java,所有代碼都是Groovy文檔中的,也可以將本文看做英文源文檔的簡略翻譯。

Groovy設計時目標之一就是讓Java程序員快速習慣Groovy。不過在Groovy中也有很多地方和Java不相同。列舉如下。

默認導入

下面這些包會由Groovy默認導入,我們不需要手動導入這些包就可以直接使用其中的類。

java.io.*java.lang.*java.math.BigDecimaljava.math.BigIntegerjava.net.*java.util.*groovy.lang.*groovy.util.*

多方法

Groovy的方法調用時機在運行時決定,這叫做運行時分發或者多方法。下面是一個例子。

int method(String arg) { return 1;}int method(Object arg) { return 2;}Object o = "Object";int result = method(o);

在Java中下面的斷言是成功的。

assertEquals(2, result);

在Groovy中下面的斷言是成功的。

assertEquals(1, result);

在Java中由于方法調用時編譯期決定的,而o的類型是Object,所以會返回2。而Groovy是在運行時決定方法調用的,由于對象的實際類型是字符串,所以會返回1。

數組初始化

由于在Groovy中花括號用作閉包聲明,因此數組初始化需要使用方括號。

//java中合法,Groovy不能int[] array = { 1, 2, 3}//Groovy正確的聲明方式int[] array = [1,2,3]

包訪問權限

在Java中不帶訪問修飾符的字段默認是包可見的。在Grooy中默認是私有的。如果希望在Groovy中設置包訪問權限??梢允褂聾PackageScope注解。

class Person { @PackageScope String name}

自動資源管理

Java7中引入了自動資源管理功能,可以以較簡便的方式打開和釋放資源。在Groovy中,閉包讓這些工作更簡單。下面是一段Java代碼。

Path file = Paths.get("/path/to/file");Charset charset = Charset.forName("UTF-8");try (BufferedReader reader = Files.newBufferedReader(file, charset)) { String line; while ((line = reader.readLine()) != null) { System.out.PRintln(line); }} catch (IOException e) { e.printStackTrace();}

對應的Groovy代碼非常簡單。

new File('/path/to/file').eachLine('UTF-8') { println it}

或者還可以使用折中方式。

new File('/path/to/file').withReader('UTF-8') { reader -> reader.eachLine { println it }}

Lambda

Java 8 支持Lambda表達式,不過Groovy不支持。Groovy支持閉包。

Runnable run = () -> System.out.println("Run");list.forEach(System.out::println);

對應的Groovy代碼。

Runnable run = { println 'run' }list.each { println it } // or list.each(this.&println)

GString

Groovy通過GString來支持內插字符串。如果在單引號字符串中發現${},會發生編譯錯誤。另外Groovy可以自動將GString轉換為String,所以我們可以放心的引用各種Java類庫。

字符串和字符常量

Groovy中單引號用作字符串常量,所以我們沒辦法聲明一個字符常量。如果需要單個字符,我們必須顯式聲明一個字符變量,然后用單引號將字符賦給它。

char a='a'

對于字符串和字符之間的轉換,也有兩種方式:Groovy的as運算符和傳統的Java轉換方式。但是假如單引號之間是一個字符串,這兩種轉換方式就不一樣了。Java轉換會拋出異常,而Groovy方式會獲取字符串的第一個字母作為轉換后的字符。

// for single char strings, both are the sameassert ((char) "c").class==Characterassert ("c" as char).class==Character// for multi char strings they are nottry { ((char) 'cx') == 'c' assert false: 'will fail - not castable'} catch(GroovyCastException e) {}assert ('cx' as char) == 'c'assert 'cx'.asType(char) == 'c'

基本類型和包裝器

Groovy是完全對象化的,所以所有基本類型都會轉換為其包裝器來使用。Groovy不支持Java的擴寬優先于包裝器的規則。因此下面的代碼,在Java中會執行第一個m方法,在Groovy中會執行第二個m方法。

int im(i)void m(long l) { println "in m(long)"}void m(Integer i) { println "in m(Integer)"}

相等運算符的行為

Java中==會比較對象引用是否是同一個。而在Groovy中,如果對象實現了Comparable,就會調用a.compareTo(b)==0方法;如果沒有實現,則調用a.equals(b)。如果需要判斷對象引用,可以使用is函數,a.is(b)。

額外的關鍵字

在Groovy中,def、as、in、trait都是關鍵字,不要將它們用作變量名等等。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩成人免费| 欧美激情综合亚洲一二区| 在线观看精品国产视频| 日韩在线视频免费观看| 久久久精品视频成人| 91久久国产精品91久久性色| 色偷偷9999www| 欧美另类第一页| 九九精品视频在线观看| 亚州精品天堂中文字幕| 欧美丰满老妇厨房牲生活| 亚洲欧美在线播放| 欧美国产日韩二区| 亚洲成人三级在线| 日韩久久午夜影院| 国产精品成人播放| 高清一区二区三区四区五区| 另类色图亚洲色图| 色无极影院亚洲| 成人有码视频在线播放| 黑丝美女久久久| 欧美日韩午夜视频在线观看| 亚洲成人aaa| 欧美激情视频网站| 亚洲精品久久久久中文字幕二区| 成人中文字幕在线观看| 一区二区日韩精品| 日韩欧美极品在线观看| 91po在线观看91精品国产性色| 国产精品久久久久久久久久久新郎| 国产精品视频xxx| 国内精品久久久久| 91久久久久久| 亚洲精品国产精品久久清纯直播| 亚洲第一av在线| 久久亚洲精品视频| 中文字幕av一区二区| 亚洲白拍色综合图区| 国产偷亚洲偷欧美偷精品| 欧美日韩中国免费专区在线看| 久久亚洲精品小早川怜子66| 精品国产91久久久| 国内精品久久久久伊人av| 欧美肥婆姓交大片| 久久国产精品久久久久久久久久| 精品国产欧美一区二区五十路| 亚洲wwwav| 国产精品美女久久久免费| 欧美特级www| 日本久久久久亚洲中字幕| 欧美激情免费视频| 亚洲成av人片在线观看香蕉| 日韩在线视频观看正片免费网站| 亚洲国产成人在线视频| 欧美日韩国产区| 国产美女久久精品香蕉69| 国产欧美韩国高清| 久久精品影视伊人网| 欧美一区二区三区免费视| 久久天天躁狠狠躁夜夜躁| 日韩欧美在线一区| 午夜精品福利在线观看| 成人在线小视频| 久久6精品影院| 久久久久久中文| 日韩专区在线观看| 国产一区二区成人| 欧美激情综合亚洲一二区| 91系列在线播放| 久久久在线观看| 成人黄色中文字幕| 国产精品99久久久久久人| 国产成人精品久久| 国产精品久久久久免费a∨大胸| 国产精品揄拍500视频| 日韩av网站电影| 日韩欧亚中文在线| 国产精品美女午夜av| 久久99热这里只有精品国产| 欧美wwwxxxx| 国产精品久久久久久久久借妻| 精品电影在线观看| 国产精欧美一区二区三区| 久久99亚洲热视| 日韩av在线直播| 日韩欧美中文字幕在线观看| 国产一区玩具在线观看| 国产三级精品网站| 国产91精品不卡视频| 亚洲成色999久久网站| 欧美激情喷水视频| 亚洲第一网中文字幕| 国产一区二区动漫| 亚洲天堂免费视频| 日本一区二三区好的精华液| 中文字幕亚洲欧美一区二区三区| 91视频免费在线| 久久露脸国产精品| 色婷婷**av毛片一区| 国产精品十八以下禁看| 色偷偷综合社区| 一区二区三区天堂av| 日韩电影免费观看在线| 国产在线999| 欧美成人免费全部观看天天性色| 精品福利免费观看| 国产精品高潮呻吟久久av野狼| 2019av中文字幕| 久久亚洲电影天堂| 欧美日韩中文字幕综合视频| 亚洲一区二区三区777| 久久国产精品网站| 久久综合久久八八| 久久亚洲精品国产亚洲老地址| 日韩在线欧美在线国产在线| 日韩中文字幕在线视频播放| 日韩精品视频在线观看网址| 国产999精品视频| 亚洲精品久久久久久下一站| 高跟丝袜一区二区三区| 成人a在线观看| 91高清视频免费观看| 亚洲成人三级在线| 欧美性猛交xxxx黑人| 久久99热这里只有精品国产| 亚洲韩国日本中文字幕| 欧美性做爰毛片| 欧美激情在线一区| 久久久久久久国产| 日韩av电影免费观看高清| 国产精品久久久久秋霞鲁丝| 亚洲男人7777| 亚洲区bt下载| 国产精品久久久久久久久久| 欧美高跟鞋交xxxxxhd| 国产精品自拍偷拍视频| 欧美国产一区二区三区| 欧美中文在线视频| 日韩美女毛茸茸| 国产成人亚洲综合91精品| 亚洲999一在线观看www| 亚洲女性裸体视频| 欧美激情国产精品| 国产精品视频导航| 欧美日韩免费观看中文| 国产精品久久久久久久电影| 一区二区三区回区在观看免费视频| 国产精品久久久久久av下载红粉| 亚洲xxxxx电影| 亚洲自拍欧美另类| 久久久国产一区二区| 欧美一级淫片播放口| 欧美激情第一页xxx| 97精品久久久中文字幕免费| 亚洲国产精品va在线看黑人| 亚洲高清av在线| 日本欧美爱爱爱| 国产最新精品视频| 国产成人精品电影久久久| 狠狠久久亚洲欧美专区| 欧美亚洲视频在线看网址| 久久成人精品一区二区三区| 91精品久久久久久| 2019中文字幕在线免费观看|