作者cyclone350 (老子我最神)
看板java
标题[问题] java 转 groovy 一问
时间Wed Oct 22 19:52:42 2014
目前 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 有提供这种直接比较位址的方式吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.193.192.133
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/java/M.1413978765.A.DE2.html
※ 编辑: cyclone350 (123.193.192.133), 10/22/2014 19:55:21
1F:→ luoqr: Object.is() ? 10/22 22:25
2F:→ cyclone350: 看了 javadoc, 应该是is没错 感谢 10/22 22:38
3F:推 nOhiTmE: 都用groovy了,这种东西就别自己刻了吧!请参考: http:/ 10/22 22:46
4F:→ nOhiTmE: /groovy.codehaus.org/gapi/groovy/transform/EqualsAndH 10/22 22:46
5F:→ nOhiTmE: ashCode.html 10/22 22:46
7F:→ cyclone350: 感谢提供,似乎跟lombok是做相同的事情!! 10/22 22:53
8F:推 nOhiTmE: groovy不就是生下来简化java的吗 XD 10/22 22:57
9F:推 HuangJC: 我还以为 groovy 可以生吞 java;所以等於又学另一种? 10/23 00:55
10F:→ HuangJC: 当然有人会说'很像了',但我拿 java 去写 c++,也是很像了 10/23 00:55
11F:→ HuangJC: '很像了'之余,不一样就是不一样的地方,还是新语言无误. 10/23 00:56
12F:→ carylorrk: 生吞 Java 的意思是?相容於 Java 的程式吗? 10/23 01:52
13F:→ carylorrk: JVM-based 的好处本来就不是跟 Java 语法相容... 10/23 01:53
14F:→ carylorrk: 而且事实上是新语言无误啊,又不像是 TypeScript 之流~ 10/23 02:00
15F:→ carylorrk: 主要是对 Java-er 友善、而且可以方便和 Java 做结合的 10/23 02:01
16F:→ carylorrk: dynamic language 10/23 02:02
17F:推 HuangJC: 我有 po 一篇文,想以 java 写批次档,结果有人提 groovy 10/23 02:05
18F:→ HuangJC: 当时还以为它可以生吞 java 所有档... 10/23 02:05
19F:→ carylorrk: 我有看到~如果有一种语言这麽万用,世界上就不会有这麽 10/23 02:26
20F:→ carylorrk: 多语言啦!不过对 Jave developer 来说 Groovy 的确是 10/23 02:27
21F:→ carylorrk: script language 的好选择 10/23 02:27
22F:→ swpoker: 感觉jvm要改名为可运行java的vm阿 10/23 08:58
23F:→ qrtt1: @HuangJC 如果你把它编译好的话,是可以吞啊。 10/23 14:43
24F:推 HuangJC: 我是说,不用我再花心力;我可以接受 Groovy 有更多语法 10/23 16:12
25F:→ HuangJC: 但如果我不想学,只想用,它至少要可以生吞 java 全部 10/23 16:12
26F:→ HuangJC: 不用花心力改写.. 10/23 16:12
27F:→ luoqr: 说生吞不如说它本身就是一个Java class顺便帮你执行script! 10/24 20:27
28F:推 HuangJC: 写 script 时,我想拥有的优点是'不用等 compile time' 10/25 00:00
29F:→ HuangJC: 不知时代是不是变了,因为现在 script 有更多特性是 10/25 00:00
30F:→ HuangJC: compiler 没有的;而 compile time 也渐渐少了(背景执行 10/25 00:00
31F:→ HuangJC: 所以 qrtt1 说'把它编译好的话'那我不能接受;我以为我 10/25 00:01
32F:→ HuangJC: 马上写 java 语法,它马上接受,因为它是 script.. 10/25 00:01
33F:→ HuangJC: 但假如我观念太旧了,你们说 script 注重的优点不是这个 10/25 00:02
34F:→ HuangJC: 那我就改改罗;举例来说,我们知道 dir 是一道指令 10/25 00:02
35F:→ HuangJC: $a=di, $b=r, 取其值 %a%%b% 可以取出 dir 三字 10/25 00:03
36F:→ HuangJC: 於是 %a%%b% 就可以引起 dir 的执行;这我当初和同学聊他 10/25 00:03
37F:→ HuangJC: 还不信,一试出来後他就喷汁了 XD;这种 script 特性超强 10/25 00:04
38F:→ HuangJC: 但也让我 debug 时很辛苦,全域搜寻无用,不知大家怎麽学 10/25 00:04
39F:→ cyclone350: 除了=之外还有甚麽是不吃Java语法的? 目前还没遇到 10/25 00:51
40F:→ luoqr: java不能生吞java? :S 10/25 00:54
41F:→ cyclone350: to HuangJC,我的groovy就是拿来单纯验证'编译好'的cla 10/25 00:56
42F:→ cyclone350: ss, 因为有时java doc不是那麽完整或是我看不懂 10/25 00:57
43F:→ cyclone350: 也懒得在写java file,所以就用groovy来用 10/25 00:59
44F:推 HuangJC: doc 不完整,试着跑一次就好,我懂;但你不用 jvm 跑? 10/25 02:03
45F:→ HuangJC: groovy(也许它就是内含 jvm?)另外包有多了什麽好处? 10/25 02:03