[問題] java 轉 groovy 一問

作者: cyclone350 (老子我最神)   2014-10-22 19:52:42
目前 groovy 新手,語法也不熟
在練習遇到一個問題
通常 java override equals 會這樣
class MyClass {
private String field1;
private String field2;
// ... getter && setter
@Override
public boolean equals(Object obj) {
if(obj == null) return false;
if(obj == this) return true;
if(obj.getClass() != this.getClass()) return false;
MyClass mc = (MyClass) obj;
return field1.equals(mc.getField1()) && field2.equals(mc.getField2());
}
}
若改成 groovy, == 會被轉成 equals,所以會無限迴圈。
目前知道 if(obj == null) 可以改成 if(obj)
但是 if(obj == this) 要怎麼改?
groovy 有提供這種直接比較位址的方式嗎?
作者: luoqr (.....)   2014-10-22 22:25:00
Object.is() ?
作者: cyclone350 (老子我最神)   2014-10-22 22:38:00
看了 javadoc, 應該是is沒錯 感謝
作者: nOhiTmE   2014-10-22 22:46:00
都用groovy了,這種東西就別自己刻了吧!請參考: http://groovy.codehaus.org/gapi/groovy/transform/EqualsAndHashCode.html抱歉忘記縮網址: http://tinyurl.com/oy7mpay
作者: cyclone350 (老子我最神)   2014-10-22 22:53:00
感謝提供,似乎跟lombok是做相同的事情!!
作者: nOhiTmE   2014-10-22 22:57:00
groovy不就是生下來簡化java的嗎 XD
作者: HuangJC (吹笛牧童)   2014-10-23 00:55:00
我還以為 groovy 可以生吞 java;所以等於又學另一種?當然有人會說'很像了',但我拿 java 去寫 c++,也是很像了'很像了'之餘,不一樣就是不一樣的地方,還是新語言無誤.
作者: carylorrk (carylorrk)   2014-10-23 01:52:00
生吞 Java 的意思是?相容於 Java 的程式嗎?JVM-based 的好處本來就不是跟 Java 語法相容...而且事實上是新語言無誤啊,又不像是 TypeScript 之流~主要是對 Java-er 友善、而且可以方便和 Java 做結合的dynamic language
作者: HuangJC (吹笛牧童)   2014-10-23 02:05:00
我有 po 一篇文,想以 java 寫批次檔,結果有人提 groovy當時還以為它可以生吞 java 所有檔...
作者: carylorrk (carylorrk)   2014-10-23 02:26:00
我有看到~如果有一種語言這麼萬用,世界上就不會有這麼多語言啦!不過對 Jave developer 來說 Groovy 的確是script language 的好選擇
作者: swpoker (swpoker)   2014-10-23 08:58:00
感覺jvm要改名為可運行java的vm阿
作者: qrtt1 (有些事,有時候。。。)   2014-10-23 14:43:00
@HuangJC 如果你把它編譯好的話,是可以吞啊。
作者: HuangJC (吹笛牧童)   2014-10-23 16:12:00
我是說,不用我再花心力;我可以接受 Groovy 有更多語法但如果我不想學,只想用,它至少要可以生吞 java 全部不用花心力改寫..
作者: luoqr (.....)   2014-10-24 20:27:00
說生吞不如說它本身就是一個Java class順便幫你執行script!
作者: HuangJC (吹笛牧童)   2014-10-25 00:00:00
寫 script 時,我想擁有的優點是'不用等 compile time'不知時代是不是變了,因為現在 script 有更多特性是compiler 沒有的;而 compile time 也漸漸少了(背景執行所以 qrtt1 說'把它編譯好的話'那我不能接受;我以為我馬上寫 java 語法,它馬上接受,因為它是 script..但假如我觀念太舊了,你們說 script 注重的優點不是這個那我就改改囉;舉例來說,我們知道 dir 是一道指令$a=di, $b=r, 取其值 %a%%b% 可以取出 dir 三字於是 %a%%b% 就可以引起 dir 的執行;這我當初和同學聊他還不信,一試出來後他就噴汁了 XD;這種 script 特性超強但也讓我 debug 時很辛苦,全域搜尋無用,不知大家怎麼學
作者: cyclone350 (老子我最神)   2014-10-25 00:51:00
除了=之外還有甚麼是不吃Java語法的? 目前還沒遇到
作者: luoqr (.....)   2014-10-25 00:54:00
java不能生吞java? :S
作者: cyclone350 (老子我最神)   2014-10-25 00:56:00
to HuangJC,我的groovy就是拿來單純驗證'編譯好'的class, 因為有時java doc不是那麼完整或是我看不懂也懶得在寫java file,所以就用groovy來用
作者: HuangJC (吹笛牧童)   2014-10-25 02:03:00
doc 不完整,試著跑一次就好,我懂;但你不用 jvm 跑?groovy(也許它就是內含 jvm?)另外包有多了什麼好處?

Links booklink

Contact Us: admin [ a t ] ucptt.com