无为

无为则可为,无为则至深!

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks

Groovy tries to be as natural as possible for Java developers. We've tried to follow the principle of least surprise when designing Groovy, particularly for developers learning Groovy who've come from a Java background.

Here we list all the major differences between Java and Groovy.

Default imports

All these packages and classes are imported by default, i.e. you do not have to use an explicit import statement to use them:

  • java.io.*
  • java.lang.*
  • java.math.BigDecimal
  • java.math.BigInteger
  • java.net.*
  • java.util.*
  • groovy.lang.*
  • groovy.util.*

Common gotchas

Here we list the common things you might trip over if you're a Java developer starting to use Groovy.

  • == means equals on all types. In Java there's a wierd part of the syntax where == means equality for primitive types and == means identity for objects. Since we're using autoboxing this would be very confusing for Java developers (since x == 5 would be mostly false if x was 5 . So for simplicity == means equals() in Groovy. If you really need the identity, you can use the method "is" like foo.is(bar). This does not work on null, but you can still use == here: foo==null.
  • in is a keyword. So don't use it as a variable name.
  • When declaring array you can't write
    int[] a = {1,2,3};

    you need to write

    int[] a = [1,2,3]
  • If you were used to write a for loop which looked like
    for (int i =0; i < len; i++)

    in groovy you need to write

    for (i in 0..len-1)

    or

    for (i in 0..<len)

Things to be aware of

  • semicolon is optional. Use them if you like (though you must use them to put several statements on one line).
  • the return keyword is optional.
  • you can use the this keyword inside static methods (which refers to this class).
  • methods and classes are public by default.
  • protected in Groovy is the equivalent of both package-protected and protected in Java. i.e. you can have friends in the same package - or derived classes can also see protected members.
  • inner classes are not supported at the moment. In most cases you can use closures instead.
  • the throws clause in method heads is not checked by the Groovy compiler, because there is no difference between checked and unchecked exceptions.

Uncommon Gotchas

Java programmers are used to semicolons terminating statements and not having closures. Also there are instance initializers in class definitions. So you might see something like:

class Trial {
private final Thing thing = new Thing ( ) ;
{ thing.doSomething ( ) ; }
}

Many Groovy programmers eschew the use of semicolons as distracting and redundant (though others use them all the time - it's a matter of coding style). A situation that leads to difficulties is writing the above in Groovy as:

class Trial {
private final thing = new Thing ( )
{ thing.doSomething ( ) }
}

This will probably be a compile error!

The issue here is that in this situation the newline is not a statement terminator so the following block is treated as a closuresthat is a parameter to the Thing constructor. Bizarre to many, but true. If you want to use instance initializers in this sort of way, it is effectively mandatory to have a semicolon:

class Trial {
private final thing = new Thing ( ) ; {
thing.doSomething ( )
}

This way the block following the initialized definition is clearly an instance initializer.

New features added to Groovy not available in Java

  • dynamic and static typing is supported - so you can omit the type declarations on methods, fields and variables
  • you can embed expressions inside strings
  • lots of new helper methods added to the JDK
  • simpler syntax for writing beans for both properties and adding event listeners
  • safe navigationusing the ?. operator, e.g. "variable?.field" and "variable?.method()" - no more nested ifs to check for null clogging up your code


凡是有该标志的文章,都是该blog博主Caoer(草儿)原创,凡是索引、收藏
、转载请注明来处和原文作者。非常感谢。

posted on 2007-06-06 21:31 草儿 阅读(388) 评论(0)  编辑  收藏 所属分类: java

只有注册用户登录后才能发表评论。


网站导航: