`
dean_liu
  • 浏览: 76250 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Groovy学习笔记

阅读更多
1.关于object.name的行为
In Groovy, everything starts with the GroovyObject interface, which, like all the
other classes we’ve mentioned, is declared in the package groovy.lang. It looks
like this:
public interface GroovyObject {
public Object invokeMethod(String name, Object args);
public Object getProperty(String property);
public void23 setProperty(String property, Object newValue);
public MetaClass getMetaClass();
public void setMetaClass(MetaClass metaClass);
}

All classes you program in Groovy are constructed by the GroovyClassGenerator
such that they implement this interface and have a default implementation for
each of these methods—unless you choose to implement it yourself.
注:主要是指程序员自己编写的类以及GDK提供的类,即除了JDK提供的类。

In Groovy code, you will often find expressions such as object.name. Here is what
happens when Groovy resolves this reference:
■ If object refers to a map, object.name refers to the value corresponding to
the name key that is stored in the map.
■ Otherwise, if name is a is a property of object, the property is referenced (with
precedence of accessor methods over fields, as you saw in section 7.4.2).
■ Every Groovy object has the opportunity to implement its own getProperty
(name) and setProperty(name, value) methods. When it does, these implementations
are used to control the property access. Maps, for example, use
this mechanism to expose keys as properties.
■ As shown in section 7.1.1, field access can be intercepted by providing the
object.get(name) method. This is a last resort as far as the Groovy runtime
is concerned: It’s used only when there is no appropriate JavaBeans property
available and when getProperty isn’t implemented.

2.括号中的Map可省略[]
new Account(number : 'A004', balance : 400)
println(a:1, b:2)
//等价于
new Account([number : 'A004', balance : 400])
println([a:1, b:2])


3.子类构造方法会自动调用父类构造方法(与Java类似)
参见:http://dean-liu.iteye.com/blog/1756787

3.as关键字
参见:http://johnnyjian.iteye.com/blog/160796
def l = [1, 2]
Object [] o = l as Object[]

CallSite[] arrayOfCallSite = $getCallSiteArray(); 
Object l = ScriptBytecodeAdapter.createList(new Object[] { Integer.valueOf(1), Integer.valueOf(2) });
return (Object[])ScriptBytecodeAdapter.asType(l, $get$array$$class$java$lang$Object());

以上两段代码是Groovy源码与其编译后反编译出来的Java源码,可以看出类型转换是使用ScriptBytecodeAdapter.asType来实现的。

3.Groovy 会自动把10.5 这样的小数倜自动装箱( Autobox ) 成java.math.BigDecimal 而非你想当然的java.lang.Float 或java.lang.Double 类型。为什么要这样?举个大多数Java 开发者都没有意识到的一个惨痛例子:写一个简短的Java 应用,它循环10 次,每次都加上0.1。你最终会得到0.99999 戒1.000001,这要看你是把和存成Double 还是Float。使用BigDecimal,你将会每次都得到1.0,和预期的一模一样。
分享到:
评论

相关推荐

    Groovy学习笔记 PDF版

    在《Groovy学习笔记》这本书中,你可能会学到如何快速入门Groovy,理解其基本语法,包括变量、控制流、类和对象的创建,以及如何利用Groovy的特性来提高开发效率。此外,书中可能还会涵盖Groovy在实际项目中的应用,...

    Groovy 学习笔记

    3. **Groovy Shell和GroovyConsole**: 这两个工具是学习和测试Groovy代码的好帮手,可以快速尝试和验证代码片段。 4. **GString**: Groovy的字符串支持模板语法,可以方便地进行字符串格式化,如`"Hello, ${name}"`...

    Groovy学习笔记.pdf

    Groovy是一种动态、灵活的编程语言,它是Java平台上的一个主要补充,特别是在脚本编写和快速原型设计方面表现突出。...这份"Groovy学习笔记.pdf"应该会提供一个良好的起点,帮助你踏上Groovy的学习之旅。

    groovy学习笔记

    以下是对Groovy学习笔记各章节的详细解释: ### 第1章:数字和字符串 在Groovy中,所有的数字都是Object类型的,这意味着你可以在对象上调用方法。例如,你可以直接在数字上使用加减乘除等运算符,如`12 + 8`。...

    Groovy学习笔记 Struts2集成--Groovy类作为Action

    通过阅读文章《Groovy学习笔记 Struts2集成--Groovy类作为Action》,你可以更深入地了解如何在实际项目中利用Groovy的特性来优化Struts2应用。提供的压缩包文件`struts2-groovy-plugin`可能包含了Struts2 Groovy插件...

    Groovy语法&Gradle配置学习笔记

    - **闭包和元编程**:深入学习Groovy的两大特色,掌握闭包的使用场景和元编程的应用。 - **Gradle入门**:学习如何创建Gradle项目,配置build.gradle文件,以及执行基本的构建任务。 - **Gradle插件**:了解常用的...

    Scala、Groovy++、Stackless Python、Erlang 学习笔记及分享

    学习Scala,你需要理解其静态类型的特性、模式匹配、 Actors模型以及类型系统,包括高阶函数、特质(traits)和不可变数据结构。 Groovy是另一种基于JVM的动态编程语言,它的语法简洁,易于阅读和编写。Groovy与...

    Java JDK 7学习笔记 PDF

    这个PDF学习笔记是开发者深入理解JDK 7特性和功能的重要参考资料。以下是对Java JDK 7的一些核心知识点的详细阐述: 1. **泛型改进**:在JDK 7中,泛型的使用更加灵活,引入了类型推断(Type Inference)特性,通过...

    读书笔记:函数式编程 scala,java8,groovy 学习.zip

    读书笔记:函数式编程 scala,java8,groovy 学习

    读书笔记:Groovy 程序设计学习.zip

    读书笔记:Groovy 程序设计学习

    GroovyPDF文档

    Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大...本套资源中包含了:Groovy轻松入门 ,Groovy中文教程, Groovy用户指南, Groovy学习笔记,Groovy官方demo,五本书!

    Spring 学习笔记《Spring Boot》源码

    在《Spring Boot》源码学习笔记中,我们可以深入理解其内部工作机制,包括自动配置、起步依赖、命令行接口(CLI)以及如何集成各种组件如JSP等。JSP(JavaServer Pages)是一种用于动态创建网页的技术,Spring Boot ...

    Java JDK 7学习笔记 完整扫描版

    **Java JDK 7学习笔记概述** Java JDK 7(Java Development Kit 7)是Java编程语言的一个重要版本,由Sun Microsystems(后被Oracle公司收购)开发,并于2011年7月28日正式发布。这个版本引入了一系列新特性、改进...

    gradle学习笔记1

    **Gradle 学习笔记** Gradle 是一种高级的构建工具,它与 Maven 类似,主要负责管理和自动化软件项目的构建过程,包括管理依赖、编译、打包和部署等任务。然而,Gradle 提供了比 Maven 更高的灵活性,因为它的构建...

    JDK 6 java 学习笔记的代码

    8. **Scripting API**:JDK 6引入了ScriptEngine接口,允许Java应用程序直接执行脚本语言代码,如JavaScript、Groovy等,增强了Java的动态语言支持。 9. **改进的异常处理**:JDK 6允许在catch子句中捕获多个异常...

    JAVA6.0学习笔记PDF版

    这份“JAVA6.0学习笔记PDF版”是由台湾著名Java培训师温信良编著的,他以其丰富的教学经验和深入的技术理解,为Java初学者和进阶者提供了一本详实的学习资料。 Java 6.0的主要更新和改进包括: 1. **改进的内存...

    gradle学习笔记简书1

    Gradle 学习笔记简书1 本文档将对 Gradle 的基本命令、Groovy 语言基础和闭包委托进行详细的讲解。 Gradle 命令 ------------ ### 1. 生成 Wrapper 使用 `gradle wrapper` 命令可以生成 Wrapper。 ### 2. 打印...

Global site tag (gtag.js) - Google Analytics