Groovy的named parameter 一般有两个用途:
1. 用在groovybean的构造函数中,提供一种便利的方式来创建新对象。
2. 用在方法中(static or not-static),如果传入的参数是named parameter的话,那么该方法会自动收集这些named parameter,然后当成该方法的第一个参数。
我们先来看看第一种用途,假设我们有下面的groovybean:
class Person {
String name
int age
}
那么groovy会自动的为这个groovybean生成一个带map为参数的构造函数,类似于下面:
class Person {
String name
int age
Person(Map map) { map.each {k,v->
this."${k}"=v
}
}
}
那么我们在创建Person对象的时候,可以通过如下方式来进行:
class TestMain {
static main(args) {
def p =new Person([name:'yezi',age:25])
println p.name
println p.age
}
}
实际上下面这两句是等价的:
def p =new Person([name:'yezi',age:25])
def p =new Person(name:'yezi',age:25)
方括号是可选的。
如果你使用过SPRING的dataBinder来讲HttpServletRequest的参数直接绑定成对象的话,那么就会发现我们也可以通过这个特性来完成spring dataBinder的这个feature。
def httpReq=...
httpReq.setAttribute("name","yezi")
httpReq.setAttribute("age",25)
def p = new Person(httpReq.getParams)
接下来让我们看看第二种用法,我们定义了printlnSth方法:
class Person {
String name
int age
void printlnSth(def params, def otherParams) {
println params.name
println params.age
println otherParams
}
}
然后我们按照下面的方式来进行调用:
class TestMain {
static main(args) {
def p =new Person([name:'yezi',age:25])
p.printlnSth name:"tianzi", "i am other params", age:25
p.printlnSth "i am other params", age:25,name:"tianzi"
}
}
//输出:
tianzi
25
i am other params
tianzi
25
i am other params
从上可以看到,如果一个方法传入的参数包含named parameter的话,那么groovy就会自动收集传入的所有named parameter, 然后当作该方法的第一个参数传进去,而不理会named paramter的位置。
但是我们同时也注意到,在定义printlnSth方法的时候,我们都是没有指定参数的类型的(都通过def指定),如果我们直接显式指定printlnSth的第一个参数的类型呢? 比如说指定为map, 如:
class Person {
String name
int age
void printlnSth(Map params, def otherParams) {
println params.name
println params.age
println otherParams
}
}
然后运行TestMain, 发现结果是一样的。
那如果显示指定printlnSth的第一个参数类型为Map之外的类型呢?让我们修改为List后来看看。
class Person {
String name
int age
void printlnSth(List params, def otherParams) {
println params.name
println params.age
println otherParams
}
}
然后再次运行TestMain, 这个时候groovy提示错误了,
Caught: groovy.lang.MissingMethodException: No signature of method: com.yezi.test.Person.printlnSth() is applicable for argument types: (java.util.LinkedHashMap, java.lang.String) values: [[name:tianzi, age:25], i am other params]
从这个错误信息我们可以推断中,如果一个方法,它的传入参数含有named parameter的话,那么groovy就会自动去寻找第一个参数为map的方法来执行(可能方法有重载)。
那么第二种用法一般做什么用呢, 一般是应用于DSL的编写中,假设我们要实现一个方法, 用来表示从哪里开车多少公里到哪里, 那么一般我们会这么定义方法:
class TestMain {
static main(args) {
drive(10,"1130 kifer rd","sfo")
}
static void drive(miles,origin,destination) {
println "drive ${miles} miles from ${origin} to ${destination}"
}
}
但是这样对于不是程序员的业务人员来说是不直观的。但是如果我们定义成下面这样的话:
class TestMain {
static main(args) {
drive(10,from:"1130 kifer rd",to:"sfo")
}
static void drive(addrInfo,miles) {
println "drive ${miles} miles from ${addrInfo.from} to ${addrInfo.to}"
}
}
这样的话,对于业务人员来讲,他也可以写,同时方法调用会显得更加清晰。
分享到:
相关推荐
apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望...
1. 引入Groovy库:在Java项目中添加Groovy的相关依赖,通常是`groovy-all`,确保Java能够访问Groovy运行时环境。 2. 创建GroovyClassLoader:使用这个类加载器可以动态加载和执行Groovy脚本。它继承自Java的...
Groovy是一种动态、开源的编程语言,它是Java平台上的一个JVM(Java Virtual Machine)语言。Groovy结合了Python、Ruby和Perl等脚本语言的简洁性和灵活性,并且完全兼容Java,可以无缝地与Java代码集成。在"groovy-...
Groovy是一种动态、灵活的编程语言,它是Java平台上的一个扩展,可以无缝集成到Java项目中。Groovy的语法简洁,支持面向对象编程、函数式编程,并提供了许多现代语言特性,如闭包和动态类型。这使得Groovy成为快速...
### Groovy Script 入门知识点详解 #### 一、Groovy脚本简介 Groovy是一种灵活的面向对象的编程语言,它运行在Java平台上。由于其语法简洁且与Java高度兼容,因此对于Java开发者来说非常容易上手。Groovy不仅支持...
Groovy 入门教程 Groovy 是一种基于 Java 语言的脚本语言,运行在 JVM 中,语法与 Java 相似,但抛弃了 Java 的一些烦琐的语法规则,提供了更加简洁和灵活的编程体验。 Groovy 的特点 1. 简洁的语法:Groovy 语法...
标题中的“Groovy和Java相互调用1”指的是在编程时如何在Groovy语言环境中调用Java类,以及反之,如何在Java程序中调用Groovy类。这是一种跨语言交互的方式,特别是在混合使用Groovy和Java的项目中非常常见。 ...
Groovy是一种动态、开源的编程语言,它是Java平台上的一个重要的补充。Groovy结合了Python、Ruby和Smalltalk等语言的特性,同时保留了与Java的无缝集成能力,使得它在脚本编写、Web开发、自动化测试等领域有着广泛的...
### Eclipse 安装 Groovy 插件的详细步骤与使用指南 #### 一、Groovy 插件的安装 为了能够在 Eclipse 中使用 Groovy 进行开发,首先需要安装 Groovy 插件。以下是详细的安装步骤: 1. **下载 GroovyEclipse.zip ...
Groovy是一种基于Java平台的、动态的、强大的编程语言,它设计的目标是增强开发者的生产力。Groovy结合了Java的静态类型系统和Python、Ruby等动态语言的灵活性,使得开发者可以更加高效地编写代码。本篇文章将深入...
Apache Groovy SDK 4.0.1 是一个重要的软件开发工具包,专为使用Groovy编程语言进行开发的程序员设计。Groovy是一种基于Java平台的动态、灵活的编程语言,它扩展了Java语言的功能,提供了简洁的语法和强大的元编程...
Groovy是一种运行在Java虚拟机上的敏捷开发语言,它提供了与Java无缝集成的能力,同时为开发者带来更加简洁和富有表达性的语法。Groovy提供了大量的动态特性,比如动态类型、闭包、元编程能力等,使得编写脚本或应用...
赠送jar包:groovy-3.0.9.jar; 赠送原API文档:groovy-3.0.9-javadoc.jar; 赠送源代码:groovy-3.0.9-sources.jar; 赠送Maven依赖信息文件:groovy-3.0.9.pom; 包含翻译后的API文档:groovy-3.0.9-javadoc-API...
Groovy是一种动态、开源的编程语言,它是Java平台上的一个重要的补充。Groovy All-2.4.8.jar 是一个包含Groovy库的集合包,主要用于简化Groovy环境的搭建和使用。这个版本(2.4.8)是Groovy在2.x系列中的一个稳定...
### Groovy速查手册知识点详解 #### 一、Groovy简介与特性 Groovy是一种为Java虚拟机(JVM)设计的动态语言。它具备完全的对象导向性、可选的类型系统、操作符定制能力、简洁的数据类型声明、闭包(Closures)、...
Groovy是一种基于Java平台的动态、灵活的编程语言,它扩展了Java的语法,提供了更加简洁和易读的代码编写方式。在Groovy中,你可以享受到脚本语言的便利,同时利用Java的强大生态系统。本文将深入探讨如何轻松入门...
赠送jar包:groovy-3.0.9.jar; 赠送原API文档:groovy-3.0.9-javadoc.jar; 赠送源代码:groovy-3.0.9-sources.jar; 赠送Maven依赖信息文件:groovy-3.0.9.pom; 包含翻译后的API文档:groovy-3.0.9-javadoc-API...
Groovy是一种基于Java平台的动态脚本语言,它在设计时考虑了简洁性和生产力的提升。Groovy之所以受到青睐,主要是因为它比Java更加抽象和高效,允许开发者编写更少的代码来实现同样的功能。以下是对Groovy的一些核心...