`
ihuashao
  • 浏览: 4721057 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Groovy Tip 33 方法的参数 二

阅读更多

Groovy Tip 33 方法的参数 二

Map参数是我们在Groovy语言的编码中比较常用的一种参数类型,我们常常会很自然的写出来如下的代码:

t.testMap(a:1)

t.testMap(a:1,b:1)

t.testMap(a:1,b:1,c:1)

new Person(name:'Tom',sex:23)

这些都是Map参数的使用。以此类推,我们也常常希望List参数也有同样的功能,比如,我们有如下的一个以List对象为参数的方法:

class Testor2 {

def testList(List list)

{

println list

}

}

然后,我们写了如下的测试:

def t = new Testor2()

t.testList(1,2,3)

我们热切的期望这样的代码能够正常运行,很可惜的是,上面的代码会报如下的错误:

Exception in thread "main" groovy.lang.MissingMethodException: No signature of method: str.Testor2.testList() is applicable for argument types: (java.lang.Integer, java.lang.Integer, java.lang.Integer) values: {1, 2, 3}

at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:54)

at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:59)

不过不要灰心,其实,我们的数组参数拥有这样的功能。比如,我们有如下的一个以数组为参数的方法:

class Testor2 {

def testArray(int[] arrs)

{

println arrs

}

}

这样,我们就可以写出如下的测试:

def t = new Testor2()

t.testArray(1,2,3)

运行结果为:

[1, 2, 3]

Groovy语言中的方法还有一个值得注意的变化是动态方法名的现象。比如,我们可以以如下的方式调用一个方法:

t."function_name"()

这种使用方式我们应该已经司空见惯了。但是,这里面隐藏着一个比较有意思的问题,就是,我们可以在方法名中出现"."和"-"这样的一些字符,这在正常的方法名中是不可能出现的。

比如,我们有如下的一个方法:

class Testor2 {

def "a.b"()

{

println 'haha'

}

}

这也是可以正常编译的。而且我们可以这样调用它:

def t = new Testor2()

t."a.b"()

运行结果为:

haha

有了这样的概念,下次如果我们遇到如下的代码,就不用惊慌了:

def web = builder.'web-app' {

builder.'display-name'('Groovy WebApp')

}

分享到:
评论

相关推荐

    Groovy Tip 21 魔幻数组 一

    在需要将多个数组合并为单一数组时,Groovy的`flatten`方法显得尤为强大。相比于Java中可能需要用到`ArrayList`的`addAll`方法,Groovy允许直接对数组列表进行扁平化操作,如: ```groovy def list1 = ['a', 'b', '...

    groovy和Java相互调用1

    2. **方法2:反射动态调用** - 使用Java的反射机制,可以在运行时动态加载和执行Groovy类。这种方法的优点是Groovy脚本的修改不需要重新编译整个项目,因为Java代码可以通过反射动态地找到并调用Groovy方法。这里,...

    JVM 动态执行Groovy脚本的方法

    本文将详细讲解如何使用JVM动态执行Groovy脚本的方法,主要包括利用JShell执行代码、调试模式下动态执行代码以及利用javax.script包执行Groovy脚本。以下是对各知识点的详细说明。 1. 利用JShell执行代码 Java 9 ...

    Groovy和Grails配置方法

    ### Groovy和Grails配置方法 #### 一、Groovy与Grails简介 Groovy是一种强大的面向对象编程语言,它运行在Java平台上,并且能够直接与Java代码进行交互。Groovy支持函数式编程特性,拥有丰富的语法糖以及简洁的...

    ASTTransformation#visit 方法中访问 Groovy 类、方法、字段、属性

    【Groovy】编译时元编程 ( ASTTransformation#visit 方法中访问 Groovy 类、方法、字段、属性 | 完整代码示例及进行编译时处理的编译过程 ) https://hanshuliang.blog.csdn.net/article/details/122815793 博客源码

    groovy

    3. 支持闭包:Groovy中的闭包类似于函数引用,可作为参数传递,有助于实现函数式编程风格。 4. GString:类似于Java的字符串,但支持占位符表达式,使字符串操作更便捷。 5. 链式调用:对象属性和方法可以连续调用,...

    Java调用Groovy,实时动态加载数据库groovy脚本

    2. 创建GroovyClassLoader:使用这个类加载器可以动态加载和执行Groovy脚本。它继承自Java的ClassLoader,能解析Groovy源码并生成字节码。 3. 加载并执行Groovy脚本:通过GroovyClassLoader的`parseClass()`方法...

    groovy中map的基本操作1

    此外,可以使用`putAll(map2)`方法将一个Map的所有键值对复制到另一个Map中,如`explicitMap = new TreeMap(); explicitMap.putAll(map)`。 比较Map是否相等,可以使用`==`运算符,它会检查两个Map的键值对是否完全...

    groovy入门经典,groovyeclipse 插件

    闭包在Groovy中的定义形式通常为`{参数列表 -> 代码块}`。闭包的this指针在闭包内部指向创建它的上下文对象,而`@delegate`注解可以将闭包的未定义方法委托给外部对象处理。 函数式编程在Groovy中也得到了很好的...

    Z2-Groovy in Action.pdf

    Groovy闭包可以像方法一样被调用,也可以作为参数传递给其他方法。闭包中可以自由地访问它被创建时作用域中的变量(闭包的自由变量)。这为Groovy的编程提供了很大的灵活性,例如可以轻松实现事件监听、回调函数、...

    Groovy轻松入门—搭建Groovy开发环境

    - **方法默认参数和命名参数**:Groovy允许方法定义默认参数值,并通过键值对的方式调用方法。 - **元编程**:Groovy支持元编程,可以在运行时修改类和对象的行为。 8. **学习资源**: - 官方文档:Groovy官方...

    Groovy Script 入门

    #### 二、Groovy脚本的特点 1. **与Java的高度兼容性**:Groovy可以无缝地与Java代码集成,可以在Groovy脚本中直接调用Java类库。 2. **动态类型**:Groovy采用了动态类型系统,变量无需显式声明类型。 3. **闭包...

    groovy动态方法

    在Groovy中,动态方法是通过元编程(Metaprogramming)实现的,这使得我们可以在运行时修改或添加类的行为。元编程在Groovy中主要通过`MetaClass`接口和`ExpandoMetaClass`类来实现。 `MetaClass`是Groovy中的一个...

    groovy速查手册

    #### 二、Groovy与Java的集成 - **跨编译**:通过Groovy的编译器(`groovyc`),Ant任务或者集成开发环境(IDE)的支持,可以将Groovy代码与Java代码一起编译。这样做的好处在于,你可以像使用Java代码一样使用...

    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版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望...

    groovy in action 中文版 2017.11

    文档还提供了一些基本的运行和编辑Groovy代码的方法,并且提到了Groovy的IDE和编辑器支持情况,以及一些Groovy的基础知识,如类和对象的声明、使用脚本、处理文本、数字、列表、映射和范围,以及如何在Java环境中...

    groovy-2.3.6-installer

    Groovy是一种动态、开源的编程语言,它是Java平台上的一个JVM(Java Virtual Machine)语言。Groovy结合了Python、Ruby和Perl等脚本语言的简洁性和灵活性,并且完全兼容Java,可以无缝地与Java代码集成。在"groovy-...

    groovy eclipse plugin2

    groovy eclipse plugin2groovy eclipse plugin2groovy eclipse plugin2groovy eclipse plugin2groovy eclipse plugin2groovy eclipse plugin2groovy eclipse plugin2

    IntelliJ IDEA自动设置代码注释的方法(带参数,带返回值,如果没有则跳过参数或返回值方法

    - **Expression**: 使用Groovy脚本语言编写,以解析方法参数: ``` groovyScript("def result=''; def stop=false; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]','').split(',').toList(); if (params...

Global site tag (gtag.js) - Google Analytics