Groovy,一句话

Groovy

Difference with Java

1.Groovy默认已经import了部分的包和类

2.multi-methods | runtime dispatch

groovy:method chosen at runtime base on types of arguments
java: method chosen at compile time base on declared types

3.数组初始化

大括号已经保留给闭包使用。数组的初始化使用中括号

int[] array = [1,2,3]

4.类的可见域

java: 默认是 'package private', 只有在同一个包里面才能访问到
groovy: 默认是public

5.semicolon is optional

6.parentheses is optional

  • 普通调用,括号可要可不要
  • 对于closure来说,不写括号是对closure的引用。带括号是对closure的调用
  • 当函数调用嵌套是,需要括号

7.return keyword is optional

最后的值会被返回

  • No matter what type of object we try to return, the return type defined in the method will determine the type that is actually returned

  • However, if the method uses the def keyword as its return type, then the return type is considered to be dynamic

  • No matter what value is contained in the last statement in a method, if the return type is void, the value returned will always be null

8.dynamic type

  • explicit type
  • use def keyword, decide at runtime later

9.ARM blocks

ARM (Automatic Resource Management) block

10.source file contain both class definitions and inline scripting.

  • when compile, generate a class object for each Groovy class
  • generate a class for scripting elements
  • Groovy scripts have a special binding for variable references

11.GroovyBeans || POGO (Plain Old Groovy Object)

  • Groovy automatically generates getters and setters for instance fields in a class that have the default visibility of public.
  • It also generates a default constructor.
  • field dereference operator @. directly access the field without going through a getter or setter

12.GroovyBeans && map

  • every groovybean has default built-in Map constructor
  • map中如果包含有不相关的属性,会直接抛异常

13.Autoboxing

  • as if primitives don't exist
  • treat any numeric value as if both an object-base numeric and a primitive

14.Strings

  • Normal strings in Groovy are instances of the java.lang.String class
  • Strings that contain the ${...} syntax are instantiated as Groovy GString objects

15.Closures, on the other hand, can reference variables from outside their own scope

given: "a variable in scope"
       def greeting = "Hello"
   and: "a closure that can access the variable"
       def greet = { println "$greeting, World!"}
   when: "we invoke the closure with variable different"
       greet()
       greeting = "Goodbye"
       greet()
   then: "the output is as expected"
       """Hello, World!
   Goodbye, World!""" == output()

16.Groovy Truth (true/false)

  • 非0都是true
  • null 空值,空串,空的集合都是false, 否则都是true

17.<=> , Spaceship operator

Spaceship is a shorthand operator that works the same as Java's compareTo method.

Spaceship operator && Elvis operator 组合, amazing

你可能感兴趣的:(Groovy,一句话)