今天抽了一点时间学习了一下Groovy的类定义,感觉基本上跟java差不多,于是跟着pdf照抄了一段,谁知道报错了:
class Money {
private int amount
private String currency
Money (amountValue, currencyValue) {
amount = amountValue
currency = currencyValue
}
boolean equals (Object other) {
if (null == other) return false
if (!(other instanceof Money)) return false
if (currency != other.currency) return false
if (amount != other.amount) return false
return true
}
int hashCode() {
amount.hashCode() + currency.hashCode()
}
Money plus (Money other) {
if (null == other) return null
if (other.currency != currency) {
throw new IllegalArgumentException(
"cannot add $other.currency to $currency")
return new Money(amount + other.amount, currency)
}
}
}
def buck = new Money(1, 'USD')
assert buck
assert buck == new Money(1 ,'USD')
assert buck + buck == new Money(2, 'USD')
我们在类中重写了plus、hashCode、equals方法,运行以后报:
Exception thrown
Assertion failed:
assert buck + buck == new Money(2, 'USD')
| | | | |
| | | | Money@14968
| | | false
| | Money@14967
| null
Money@14967sert buck + buck == new Money(2, 'USD')
java.lang.IllegalArgumentException: bad position: 976
at javax.swing.text.JTextComponent.moveCaretPosition(JTextComponent.java:1551)
at javax.swing.text.JTextComponent$moveCaretPosition$5.call(Unknown Source)
at groovy.ui.Console.hyperlinkUpdate(Console.groovy:1333)
at javax.swing.JEditorPane.fireHyperlinkUpdate(JEditorPane.java:345)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
那就找错吧,测试发现plus方法写错了,没有返回值了,唉,将蓝色的那句话放到外面就行了,正确的写法
Money plus (Money other) {
if (null == other) return null
if (other.currency != currency) {
throw new IllegalArgumentException(
"cannot add $other.currency to $currency")
}
return new Money(amount + other.amount, currency)
}
相关推荐
### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...
`myCommandString.execute()`可以启动一个外部命令,并通过`proc`对象读取其输入、错误和输出流。示例中展示了如何在Windows环境下执行`dir`命令并指定工作目录,以及如何设置环境变量并通过`execute()`方法运行命令...
【Jenkins笔记笔记笔记】 Jenkins 是一个开源的持续集成(CI)服务器,它使得开发者能够在软件开发过程中实现自动化构建、测试和部署。这个工具在IT行业中被广泛使用,尤其在敏捷开发和DevOps实践中扮演着重要角色...
### Grails 开发笔记 #### Grails 概述 Grails 是一款用于 Web 应用开发的开源框架,它基于 Groovy 编程语言,并集成了 Spring、Hibernate 和 SiteMesh 等成熟技术栈。其核心特性之一是“规约取代配置”...
### Android高级笔记——Volley详解 #### 一、Volley简介及作用 Volley是Google提供的一个用于Android的网络通信库,它可以帮助开发者更轻松地完成HTTP请求和响应的处理,尤其是在图片加载方面表现优秀。Volley支持...
1. **起步依赖(Starters)** Spring Boot通过起步依赖简化了依赖管理。每个起步依赖都是一个Maven或Gradle模块,包含了启动特定功能所需的依赖。例如,`spring-boot-starter-web`提供了构建Web应用所需的一切。 2...
1. **常用命令** - `play new <项目名>`:创建一个新的Play项目。 - `play run <项目名>`:启动项目,监听文件变化并自动重载。 - `play eclipsify <项目名>`:将Play项目转换为Eclipse项目,便于在IDE中开发。 ...
这与Groovy、Python和VBScript等其他脚本语言有相似之处。JavaScript的主要用途包括前端页面交互、后端编程(通过Node.js实现)以及嵌入式系统(如Ruff)的应用。 当前,JavaScript的标准版本主要包括EcmaScript 5...
例如,使用Butterknife库时,会出现这个错误。为了解决这个问题,我们需要在`build.gradle`文件的`defaultConfig`部分添加以下代码: ```groovy android { ... defaultConfig { ... javaCompileOptions { ...
- **智能转换**:Kotlin 的智能转换机制能够避免空指针异常,如果一个变量被声明为非空类型,试图赋值为 null 会编译错误。 - **可空类型**:用问号(?)表示可空类型,例如 String?。 3. **高阶函数与 Lambda ...
- **Groovy脚本**:学习使用Groovy编写自定义逻辑,扩展JMeter的功能。 #### 9. 集群与分布式测试 - **分布式测试**:理解JMeter的分布式测试模式,如何配置多台机器协同执行测试。 - **性能瓶颈分析**:通过分布式...
```groovy implementation 'com.google.code.ksoap2-android:ksoap2-android:3.6.4' ``` 然后同步项目,ksoap2库就会被引入到你的工程中。 2. **创建SOAP请求**:ksoap2提供了SoapObject类来创建SOAP请求。你需要...
例如,创建一个JMeter测试计划,模拟大量用户同时上传文件,观察服务器的响应时间、吞吐量、错误率等指标,以此评估系统的稳定性和扩展性。 文件列表中的文档和PDF涵盖了关于这些技术的详细教程和实践案例。"测试...
2. **动态语言支持**:JDK 6引入了JSR 223(Scripting for the Java Platform),使得在Java应用程序中嵌入和执行脚本语言成为可能,如JavaScript、Groovy等。 3. **Swing增强**:对Swing组件进行了大量更新,例如...
1. **SOAP协议理解**: SOAP是基于HTTP协议的,允许跨平台的数据交换。它通过封装XML数据来发送请求,并接收XML格式的响应。在使用SoapUI时,了解SOAP消息的基本结构至关重要,包括SOAP Envelope、Header和Body等...
笔记在开始安装2.0之前,请先卸载所有1.x应用程序和设备类型。 仅在您已经卸载旧版本的Lock Manager之后再安装此软件。 我建议在SmartThings IDE中卸载该应用程序的实例。问题? 在提问。建议/错误? 在创建故障单。...
验证错误转换的资源包( src/main/resources/message.properties ) 配置( src/main/resources/log4j.properties ) 陷阱 依赖关系解析和GORM(某些特定的GORM版本可能会发现某些Spring Framework版本中缺少的...