前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Groovy 添加带注释的Map构造函数

Groovy 添加带注释的Map构造函数

作者头像
白石
发布于 2019-08-23 02:07:46
发布于 2019-08-23 02:07:46
1.2K00
代码可运行
举报
文章被收录于专栏:白石白石
运行总次数:0
代码可运行

添加带注释的Map构造函数

从Groovy的早期开始,我们可以创建POGO(Plain Old Groovy Objects)类,它们将具有带有Map参数的构造函数。 Groovy在生成的类中自动添加构造函数。我们可以使用命名参数来创建POGO的实例,因为Map参数构造函数。 这只有在我们不添加自己的构造函数且属性不是最终的时才有效。从Groovy 2.5.0开始,我们可以使用@MapConstrutor AST转换注释来添加带有Map参数的构造函数。使用注释我们可以有更多选项来自定义生成的构造函数。例如,我们可以让Groovy使用Map参数生成构造函数,并添加我们自己的构造函数。 属性也可以是final,我们仍然可以使用带有Map参数的构造函数。

首先,我们在创建POGO时查看Groovy中的默认行为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Simple POGO.
// Groovy adds Map argument
// constructor to the class.
class Person {
    String name
    String alias
    List<String> likes
}
 
// Create Person object using
// the Map argument constructor.
// We can use named arguments,
// with the name of key being
// the property name. Groovy
// converts this to Map.
def mrhaki =
    new Person(
        alias: 'mrhaki',
        name: 'Hubert Klein Ikkink',
        likes: ['Groovy', 'Gradle'])
         
assert mrhaki.alias == 'mrhaki'
assert mrhaki.name == 'Hubert Klein Ikkink'
assert mrhaki.likes == ['Groovy', 'Gradle']
 
 
// Sample class with already
// a constructor. Groovy cannot
// create a Map argument constructor now.
class Student {
    String name
    String alias
     
    Student(String name) {
        this.name = name
    }
}
 
 
import static groovy.test.GroovyAssert.shouldFail
 
// When we try to use named arguments (turns into a Map)
// in the constructor we get an exception.
def exception = shouldFail(GroovyRuntimeException) {
    def student =
        new Student(
            name: 'Hubert Klein Ikkink',
            alias: 'mrhaki')
}
 
assert exception.message.startsWith('failed to invoke constructor: public Student(java.lang.String) with arguments: []')
assert exception.message.endsWith('reason: java.lang.IllegalArgumentException: wrong number of arguments')

现在让我们在下一个例子中使用@MapConstructor注释:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import groovy.transform.MapConstructor
 
@MapConstructor
class Person {
    final String name // AST transformation supports read-only properties.
    final String alias
    List<String> likes
}
 
// Create object using the Map argument constructor.
def mrhaki =
    new Person(
        name: 'Hubert Klein Ikkink',
        alias: 'mrhaki',
        likes: ['Groovy', 'Gradle'])
         
assert mrhaki.name == 'Hubert Klein Ikkink'
assert mrhaki.alias == 'mrhaki'
assert mrhaki.likes == ['Groovy', 'Gradle']
 
// Using the annotation the Map argument
// constructor is added, even though we
// have our own constructor as well.
@MapConstructor
class Student {
    String name
    String alias
     
    Student(String name) {
        this.name = name
    }
}
 
def student =
    new Student(
        name: 'Hubert Klein Ikkink',
        alias: 'mrhaki')
         
assert student.name == 'Hubert Klein Ikkink'
assert student.alias == 'mrhaki'

AST转换支持几个属性。 我们可以使用属性includesexcludes来包含或排除将在Map参数构造函数中获取值的属性。 在下面的例子中,我们看到了如何使用includes属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import groovy.transform.MapConstructor
 
@MapConstructor(includes = 'name')
class Person {
    final String name
    final String alias
    List<String> likes
}
 
// Create object using the Map argument constructor.
def mrhaki =
    new Person(
        name: 'Hubert Klein Ikkink',
        alias: 'mrhaki',
        likes: ['Groovy', 'Gradle'])
         
assert mrhaki.name == 'Hubert Klein Ikkink'
assert !mrhaki.alias
assert !mrhaki.likes

我们可以使用属性prepost通过AST转换添加在生成的代码之前或之后执行的自定义代码。 我们使用需要执行的代码为这些属性分配一个Closure

在下一个示例中,我们使用代码设置pre属性,如果未通过构造函数设置,则该代码计算alias属性值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// If alias is set in constructor use it, otherwise
// calculate alias value based on name value.
@MapConstructor(post = { alias = alias ?: name.split().collect { it[0] }.join() })
class Person {
    final String name // AST transformation supports read-only properties.
    final String alias
    List<String> likes
}
 
// Set alias in constructor.
def mrhaki =
    new Person(
        name: 'Hubert Klein Ikkink',
        alias: 'mrhaki',
        likes: ['Groovy', 'Gradle'])
         
assert mrhaki.name == 'Hubert Klein Ikkink'
assert mrhaki.alias == 'mrhaki'
assert mrhaki.likes == ['Groovy', 'Gradle']
 
// Don't set alias via constructor.
def hubert =
    new Person(
        name: 'Hubert A. Klein Ikkink')
         
assert hubert.name == 'Hubert A. Klein Ikkink'
assert hubert.alias == 'HAKI'
assert !hubert.likes

用Groovy 2.5.0编写。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
墙面也能变镜子,只看影子就能还原视频,MIT新算法让摄像头无死角
你在看电影,墙上的影子也在动。如果只让你看到这样一段视频,你能猜出来屏幕上播放的是什么吗?
量子位
2019/12/30
6260
用AI算法分析光影看到盲点:这项MIT新研究偷学到二娃技能
安妮 编译整理 量子位 出品 | 公众号 QbitAI 嗨少年,想不想来双透视眼? 虽然这听起来有些科幻,但近日,麻省理工学院(MIT)计算机科学和人工智能实验室(CSAIL)的研究人员发明了一种新算
量子位
2018/03/26
1K0
用AI算法分析光影看到盲点:这项MIT新研究偷学到二娃技能
只要算法够厉害,白墙能当镜子用:我初中物理都白学了 | Nature新论文
一篇新论文登上了Nature,论文中显示,仅仅用一台普通的数码相机,仅仅凭借墙上模糊不清的光影,就能还原最初的画面。
量子位
2019/04/24
6190
只要算法够厉害,白墙能当镜子用:我初中物理都白学了 | Nature新论文
62. 非视线成像 - 基于飞秒摄影技术
你有没有想过,如果能让司机在驾驶汽车转弯时提前知道另外一个车道上的情况,那应该会减少大量的车祸:
HawkWang
2021/10/13
5600
MIT非视线成像“透视相机”:隔墙观物、影中窥人!
2012年,MIT计算机视觉科学家安东尼奥·托拉尔巴(Antonio Torralba)在西班牙海岸度假时,发现他酒店房间墙壁上的杂散阴影似乎不是由任何东西投射出来的。
新智元
2018/09/25
1.5K0
MIT非视线成像“透视相机”:隔墙观物、影中窥人!
MIT、哈佛新研究:提速15000倍,借助光场实现3D场景超高速渲染
对人类来说,观看单个二维图像并理解它捕获的完整三维场景是一件容易的事,但对于 AI 智能体来说则不然。现实生活中,一台需要与物体进行交互的机器(比如一个收割庄稼或协助手术的机器人)必须能够从的 2D 图像的观察中推断出 3D 场景的属性。
机器之心
2021/12/15
6920
MIT、哈佛新研究:提速15000倍,借助光场实现3D场景超高速渲染
非视线成像 - 基于飞秒摄影技术
你有没有想过,如果能让司机在驾驶汽车转弯时提前知道另外一个车道上的情况,那应该会减少大量的车祸:
AI算法与图像处理
2021/10/15
4900
非视线成像 - 基于飞秒摄影技术
真透视眼!西北大学开发新全息成像设备,用算法重构散射光,未来可透过皮肤看血管
但是你有没有想过,我们的手掌是有骨头的,光被骨头挡住,应该会跟拍X光一样,显示出一个轮廓清晰的阴影,为什么没有呢?
大数据文摘
2021/11/23
4320
影子追踪!MIT让自动驾驶练出“透视眼”,看影子就知道有无物体靠近
为了改善自动驾驶系统的安全性,MIT的几位工程师近日开发了一个新的系统。它可以识别地面上的影子,进而判断拐角处是否有物体正在靠近车辆。
大数据文摘
2019/11/08
5610
窥探他人眼中的世界:用眼睛反光重建3D场景,《黑镜》走进现实
从人眼反射中重建3D场景,这是一个新奇的话题。近日,马里兰大学帕克分校的一项研究实现了这一效果,利用人眼反光3D重建这个人正在观察的物体或场景,让人直呼《黑镜》重现。
机器之心
2023/08/07
2420
窥探他人眼中的世界:用眼睛反光重建3D场景,《黑镜》走进现实
65. 非视线成像 - 把墙角变为相机
我已经为你介绍了基于飞秒摄影、基于WIFI、以及基于角膜成像的非视线成像技术。这些技术都有一个淳朴的初衷,希望能够在视线成像无法触达的时候,能够观察到隐藏的场景,从而可以帮助行车安全、反恐防暴、消防救灾等等。
HawkWang
2021/12/15
5440
65. 非视线成像 - 把墙角变为相机
MIT利用深度学习技术,识别在黑暗中拍摄的照片里的物体
即使在光线良好的情况下,酒杯的小瑕疵或隐形眼镜中的微小褶皱也很难找出。而在几乎完全黑暗的情况下,这种透明特征或物体的缺陷几乎不可能被发现。为了解决这个问题,麻省理工学院的工程师开发出一种能够在黑暗中揭示这些难以发现的细节的技术。
AiTechYun
2018/12/27
1.6K0
MIT利用深度学习技术,识别在黑暗中拍摄的照片里的物体
51. 瞬态成像 - 飞秒摄影
你看到的这张照片拍摄于1964年,是MIT的Harold Edgerton教授的杰作。
HawkWang
2021/03/16
8310
51. 瞬态成像 - 飞秒摄影
MIT 发明“雾中看车”新成像系统,雾天自动驾驶表现比人类更好
credit:Camera Culture 来源:CNBC 编译:肖琴 【新智元导读】麻省理工学院媒体实验室的研究人员开发了一种新的成像系统,利用SPAD相机和新的算法,可以测量被雾遮挡的物体的距离。在实验中,该系统的表现比人类的视觉更好,这对于自动驾驶汽车来说是一个巨大的突破。 麻省理工学院媒体实验室的研究人员开发了一种新的成像系统,可以测量被雾遮挡的物体的距离,而人的视线很难看穿雾气。 他们的目标是将该技术整合到自动驾驶汽车中,这样,即使在恶劣天气下,车辆也能避开障碍物。 这个成像传感系统使用SPAD(
新智元
2018/05/29
9150
MIT 发明“雾中看车”新成像系统,雾天自动驾驶表现比人类更好
credit:Camera Culture 精彩回顾 2018 新智元产业跃迁 AI 技术峰会圆满结束,点击链接回顾大会盛况: 爱奇艺 http://www.iqiyi.com/l_19rr3aqz3z.html 腾讯新闻 http://v.qq.com/live/p/topic/49737/preview.html 新浪科技 http://video.sina.com.cn/l/p/1722511.html 云栖社区 https://yq.aliyun.com/webinar/play/41
朱晓霞
2018/04/18
9360
MIT 发明“雾中看车”新成像系统,雾天自动驾驶表现比人类更好
MIT:模仿螃蟹的眼睛,创造出世界首个两栖人工视觉系统,水下陆地都能用!
大数据文摘出品 人工视觉系统,一直是自动驾驶领域的核心技术之一。 目前,所有的人工视觉系统都是单独基于陆地或者单独基于水下开发的,视野一般也只有180度。 对于普通人来说,这也许够用,但是对于需要同时在陆地和水下作业的机器人来说,一双可以切换陆地和水下模式的两栖计算机视觉系统,就显得非常重要了。 MIT人工智能实验室(CSAIL)、光州科学技术研究所(GIST)和韩国首尔国立大学(Seoul National University)开发了一种新型的人工视觉系统,灵感来自招潮蟹,可以在水陆两栖通用的同时,还能
大数据文摘
2022/08/26
3630
MIT:模仿螃蟹的眼睛,创造出世界首个两栖人工视觉系统,水下陆地都能用!
重磅 | MIT AI 实验室发布16大年度黑科技:神经网络与机器人最前沿
【新智元导读】MIT人工智能实验室( CSAIL )近日在官网刊文,回顾了实验室在过去一年所取得的技术突破。他们在机器人、计算机视觉、神经网络等方面取得了瞩目的成绩,具体说来,有可触摸的交互式动态视频技术、可以”预测未来“的深度神经网络以及能描绘出黑洞照片的程序……CSAIL 在人工智能的研究和探索上一直都处于学界前沿,其技术和研究视野得到了广泛的认可,被称为前沿科技的“代名词”。想了解人工智能研究的真实状况和未来发展趋势,看看他们都在干什么吧。 能够预测未来的机器,能够修复伤口的机器人,无线情绪检测器,这
新智元
2018/03/26
9520
重磅 | MIT AI 实验室发布16大年度黑科技:神经网络与机器人最前沿
MIT黑科技:无需视觉输入,立体声音频+摄像机元数据即可实现移动车辆定位
作者:Chuang Gan、Hang Zhao、Peihao Chen、David Cox、Antonio Torralba
机器之心
2019/11/11
7930
MIT黑科技:无需视觉输入,立体声音频+摄像机元数据即可实现移动车辆定位
通俗理解SLAM算法
SLAM (simultaneous localization and mapping),也称为CML (Concurrent Mapping and Localization), 即时定位与地图构建,或并发建图与定位。问题可以描述为:将一个机器人放入未知环境中的未知位置,是否有办法让机器人一边逐步描绘出此环境完全的地图,同时一边决定机器人应该往哪个方向行进。例如扫地机器人就是一个很典型的SLAM问题,所谓完全的地图(a consistent map)是指不受障碍行进到房间可进入的每个角落。SLAM最早由Smith、Self和Cheeseman于1988年提出。由于其重要的理论与应用价值,被很多学者认为是实现真正全自主移动机器人的关键。
智能算法
2019/12/27
24.2K0
通俗理解SLAM算法
MIT:模仿螃蟹的眼睛,创造出世界首个两栖人工视觉系统,水下陆地都能用!
来源:大数据文摘本文约1700字,建议阅读5分钟本文介绍一种对红细胞和白细胞图像分类任务的主动学习端到端工作流程。 人工视觉系统,一直是自动驾驶领域的核心技术之一。 目前,所有的人工视觉系统都是单独基于陆地或者单独基于水下开发的,视野一般也只有180度。 对于普通人来说,这也许够用,但是对于需要同时在陆地和水下作业的机器人来说,一双可以切换陆地和水下模式的两栖计算机视觉系统,就显得非常重要了。 MIT人工智能实验室(CSAIL)、光州科学技术研究所(GIST)和韩国首尔国立大学(Seoul Nationa
数据派THU
2022/08/29
3140
MIT:模仿螃蟹的眼睛,创造出世界首个两栖人工视觉系统,水下陆地都能用!
推荐阅读
墙面也能变镜子,只看影子就能还原视频,MIT新算法让摄像头无死角
6260
用AI算法分析光影看到盲点:这项MIT新研究偷学到二娃技能
1K0
只要算法够厉害,白墙能当镜子用:我初中物理都白学了 | Nature新论文
6190
62. 非视线成像 - 基于飞秒摄影技术
5600
MIT非视线成像“透视相机”:隔墙观物、影中窥人!
1.5K0
MIT、哈佛新研究:提速15000倍,借助光场实现3D场景超高速渲染
6920
非视线成像 - 基于飞秒摄影技术
4900
真透视眼!西北大学开发新全息成像设备,用算法重构散射光,未来可透过皮肤看血管
4320
影子追踪!MIT让自动驾驶练出“透视眼”,看影子就知道有无物体靠近
5610
窥探他人眼中的世界:用眼睛反光重建3D场景,《黑镜》走进现实
2420
65. 非视线成像 - 把墙角变为相机
5440
MIT利用深度学习技术,识别在黑暗中拍摄的照片里的物体
1.6K0
51. 瞬态成像 - 飞秒摄影
8310
MIT 发明“雾中看车”新成像系统,雾天自动驾驶表现比人类更好
9150
MIT 发明“雾中看车”新成像系统,雾天自动驾驶表现比人类更好
9360
MIT:模仿螃蟹的眼睛,创造出世界首个两栖人工视觉系统,水下陆地都能用!
3630
重磅 | MIT AI 实验室发布16大年度黑科技:神经网络与机器人最前沿
9520
MIT黑科技:无需视觉输入,立体声音频+摄像机元数据即可实现移动车辆定位
7930
通俗理解SLAM算法
24.2K0
MIT:模仿螃蟹的眼睛,创造出世界首个两栖人工视觉系统,水下陆地都能用!
3140
相关推荐
墙面也能变镜子,只看影子就能还原视频,MIT新算法让摄像头无死角
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验