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

Groovy探索 “as”关键字的深入使用

阅读更多

Groovy探索 "as"关键字的深入使用

在前面的系列《Groovy Tip 20 "as"关键字的用法》中,我们已经谈到了"as"关键字的一些激动人心的用法。本篇则要接着前篇的内容说下去,继续来展现"as"关键字的一些更为激动人心的用法。

在前一篇中,我们谈到了"as"关键字的一个用法是进行类型转换。最常用的是形如下面的用法:

def list = ['a','b','c']

println list.class

def strs = list as String[]

println strs.class

这就是一个常用的类型转换的代码,从下面的打印结果可以看出,"as"关键字的使用的确使得变量进行了类型转换。

class java.util.ArrayList

class [Ljava.lang.String;

看到了这个用法,我们可能会想,"as"关键字的这个用法是如何实现的?我们如何想把自己设计的两个类之间进行相互转换,该如何实现。

比如说我们有如下的两个类:

class A

{

def x

}

class B

{

def x

}

如果我们已经得到了一个A类的对象,如下:

def a = new A(x:3)

那么我们如何通过下面的语句获取到一个B类的对象呢?

def b = a as B

其实,很简单,我们只需要在A类里实现"asType"方法即可,如下所示:

class A

{

def x

Object asType(Class type)

{

if(type == B) return new B(x:this.x+1)

}

}

这是我们重写过的A类,那么我们现在就可以测试看看我们是否实现了上面所希望的功能:

def a = new A(x:3)

def b = a as B

println b.class.simpleName

println b.x

运行结果为:

B

4

可以看到,的确是实现了我们预想的功能。

除此之外,"as"关键字还有让我们惊奇的发现。比如,我们有如下的一个简单类:

class C

{

def x

def y

public C(x,y)

{

this.x = x

this.y = y

}

}

那么,我们可以这样实例化它的一个实例:

def list = [1,2]

def c = list as C

println c.class.simpleName

println "${c.x},${c.y}"

运行的结果为:

C

1,2

这真是如魔幻一样。

且慢惊叹,再跟着我们看看下面的例子,比如,我们定义了如下的一个接口:

interface D

{

def test_d()

}

我们就可以这样使用"as"关键字:

def map = [test_d:{println 'ok'}]

def d = map as D

println d.class.simpleName

d.test_d()

运行结果为:

$Proxy0

ok

真的是很酷吧!我们可以看到,"as"关键字是Groovy语言中是一个很重要的关键字,它的用法体现了Groovy语言作为一个动态语言的特点,一切都可以在运行期内在做决定,充分的展现了Groovy语言灵活、快捷的特点。

分享到:
评论

相关推荐

    Groovy在Spring中的简单使用

    Groovy 在 Spring 中的简单使用 Groovy 是一种敏捷的动态语言,用于 Java 虚拟机,可以与 Java 代码无缝集成。它的类 Java 语法对于 Java 开发人员来说很自然,且可以作为纯粹的脚本语言使用。在 Spring 中动态使用...

    groovy入门经典,groovyeclipse 插件

    Groovy也支持使用`def`关键字来定义未指定类型的变量。 闭包是Groovy的一个核心特性,它类似于函数指针,可以被用作参数传递或者作为返回值。闭包在Groovy中的定义形式通常为`{参数列表 -> 代码块}`。闭包的this...

    Java中使用Groovy的三种方式

    本文将深入探讨在Java项目中使用Groovy的三种主要方式,并阐述它们各自的优势和应用场景。 一、作为嵌入式脚本 Java 6引入了JSR 223(Scripting for the Java Platform),允许在Java程序中直接执行脚本语言。...

    Groovy安装以及简单使用

    Groovy是一种基于Java平台的动态编程语言,它与Java语法高度兼容,但提供了更简洁、更灵活的写法,使得开发更加高效。...通过深入学习和实践,我们可以利用Groovy的优势提高生产力,解决实际问题。

    Groovy Script 入门

    1. **创建Groovy文件**:使用文本编辑器创建一个名为hello.groovy的文件,并输入以上代码。 2. **执行脚本**:打开命令行窗口,导航至包含hello.groovy文件的目录,然后输入`groovy hello`来运行脚本。 #### 四、...

    深入探索Groovy脚本:文件操作的艺术

    本文将深入探讨如何使用Groovy脚本进行文件操作,包括文件的创建、读取、写入、删除等基本操作,以及更高级的操作,如文件过滤和搜索。通过实际的代码示例,我们将展示Groovy在文件操作中的优雅和力量。 Groovy提供...

    eclipse安装groovy插件的步骤

    ### Eclipse 安装 Groovy 插件的详细步骤与使用指南 #### 一、Groovy 插件的安装 为了能够在 Eclipse 中使用 Groovy 进行开发,首先需要安装 Groovy 插件。以下是详细的安装步骤: 1. **下载 GroovyEclipse.zip ...

    EditPlus3.12 540 SN及Groovy语法文件

    本文将深入探讨EditPlus 3.12 540版本的序列号(SN)问题以及与Groovy语言相关的语法文件,帮助用户更好地理解和利用这一强大的文本编辑器。 EditPlus是一款功能丰富的文本编辑器,尤其适合编程人员使用。它支持...

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

    3. 加载并执行Groovy脚本:通过GroovyClassLoader的`parseClass()`方法解析Groovy源码,然后使用`newInstance()`方法创建脚本实例,最后通过`invokeMethod()`方法执行脚本中的方法。 在Java与MongoDB的交互中,我们...

    Groovy中文版教程

    通过阅读《Groovy in Action》中文版,你可以深入了解Groovy的这些特性,并学会如何在实际项目中有效地使用它,无论是编写脚本、构建工具还是开发大型应用程序,Groovy都能提供一种更高效、更灵活的方式。

    groovy和Java相互调用1

    这是一种跨语言交互的方式,特别是在混合使用Groovy和Java的项目中非常常见。 Groovy调用Java类相当直观。首先,你需要在Groovy脚本中使用`import`语句导入你想要使用的Java类。例如,如果要使用`java.util.Random`...

    SoapUI插件实现import groovy功能

    为了导入Groovy库,你可以使用`import`关键字,如 `import some.package.YourClass`,这样就可以在脚本中使用该类的功能。 对于`import groovy`,通常意味着你想要引入Groovy标准库或者其他第三方Groovy库。例如,...

    Groovy插件

    在Marketplace的搜索框内,输入“Groovy”关键字,系统会列出所有与Groovy相关的插件。找到名为“Groovy-Eclipse”的插件,它是官方推荐的Groovy开发工具集。 如果没有在Marketplace中找到Groovy插件,或者由于网络...

    groovy 经典入门 通俗易懂

    在本文中,我们将深入探讨Groovy的基础知识,包括语法特性、面向对象编程、脚本使用以及与其他Java技术的集成,以帮助初学者快速入门。 1. **Groovy语法简介** - Groovy的语法简洁且易于理解,它融合了多种语言的...

    Groovy入门教程.doc

    Groovy允许省略变量的类型声明,使用`def`关键字即可。在`main`方法中,可以使用`println`打印"Hello World"。如果整个文件只有一句`println`语句,Groovy依然能正确执行。 Groovy的语法特点包括: 1. **类型推断**...

    groovy-api-chm

    Groovy是一种基于Java平台的、动态的、开源的编程语言,它设计的目的是为了提高开发者的生产力,同时保持与Java的兼容性。...对于开发者来说,深入学习这个文档将极大地提升对Groovy的理解和使用能力。

Global site tag (gtag.js) - Google Analytics