`

Groovy错误笔记1

 
阅读更多

今天抽了一点时间学习了一下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简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...

    Groovy_笔记

    `myCommandString.execute()`可以启动一个外部命令,并通过`proc`对象读取其输入、错误和输出流。示例中展示了如何在Windows环境下执行`dir`命令并指定工作目录,以及如何设置环境变量并通过`execute()`方法运行命令...

    Jenkins笔记笔记笔记

    【Jenkins笔记笔记笔记】 Jenkins 是一个开源的持续集成(CI)服务器,它使得开发者能够在软件开发过程中实现自动化构建、测试和部署。这个工具在IT行业中被广泛使用,尤其在敏捷开发和DevOps实践中扮演着重要角色...

    grails开发笔记

    ### Grails 开发笔记 #### Grails 概述 Grails 是一款用于 Web 应用开发的开源框架,它基于 Groovy 编程语言,并集成了 Spring、Hibernate 和 SiteMesh 等成熟技术栈。其核心特性之一是“规约取代配置”...

    Android高级笔记

    ### Android高级笔记——Volley详解 #### 一、Volley简介及作用 Volley是Google提供的一个用于Android的网络通信库,它可以帮助开发者更轻松地完成HTTP请求和响应的处理,尤其是在图片加载方面表现优秀。Volley支持...

    Spring Boot核心技术-笔记_springboot_

    1. **起步依赖(Starters)** Spring Boot通过起步依赖简化了依赖管理。每个起步依赖都是一个Maven或Gradle模块,包含了启动特定功能所需的依赖。例如,`spring-boot-starter-web`提供了构建Web应用所需的一切。 2...

    play framework 框架个人笔记

    1. **常用命令** - `play new <项目名>`:创建一个新的Play项目。 - `play run <项目名>`:启动项目,监听文件变化并自动重载。 - `play eclipsify <项目名>`:将Play项目转换为Eclipse项目,便于在IDE中开发。 ...

    JavaScript语言概述笔记和常用工具

    这与Groovy、Python和VBScript等其他脚本语言有相似之处。JavaScript的主要用途包括前端页面交互、后端编程(通过Node.js实现)以及嵌入式系统(如Ruff)的应用。 当前,JavaScript的标准版本主要包括EcmaScript 5...

    Android Studio3.0.1填坑笔记

    例如,使用Butterknife库时,会出现这个错误。为了解决这个问题,我们需要在`build.gradle`文件的`defaultConfig`部分添加以下代码: ```groovy android { ... defaultConfig { ... javaCompileOptions { ...

    learn-kotlin:kotlin 学习笔记

    - **智能转换**:Kotlin 的智能转换机制能够避免空指针异常,如果一个变量被声明为非空类型,试图赋值为 null 会编译错误。 - **可空类型**:用问号(?)表示可空类型,例如 String?。 3. **高阶函数与 Lambda ...

    jmeter训练营三天

    - **Groovy脚本**:学习使用Groovy编写自定义逻辑,扩展JMeter的功能。 #### 9. 集群与分布式测试 - **分布式测试**:理解JMeter的分布式测试模式,如何配置多台机器协同执行测试。 - **性能瓶颈分析**:通过分布式...

    android ksoap 代码共享

    ```groovy implementation 'com.google.code.ksoap2-android:ksoap2-android:3.6.4' ``` 然后同步项目,ksoap2库就会被引入到你的工程中。 2. **创建SOAP请求**:ksoap2提供了SoapObject类来创建SOAP请求。你需要...

    java上传 hibernate jmeter

    例如,创建一个JMeter测试计划,模拟大量用户同时上传文件,观察服务器的响应时间、吞吐量、错误率等指标,以此评估系统的稳定性和扩展性。 文件列表中的文档和PDF涵盖了关于这些技术的详细教程和实践案例。"测试...

    java_JDK6_code.rar_javajdk6

    2. **动态语言支持**:JDK 6引入了JSR 223(Scripting for the Java Platform),使得在Java应用程序中嵌入和执行脚本语言成为可能,如JavaScript、Groovy等。 3. **Swing增强**:对Swing组件进行了大量更新,例如...

    WebService接口调试工具- SoapUI-5.2.1-windows-bin.zip

    1. **SOAP协议理解**: SOAP是基于HTTP协议的,允许跨平台的数据交换。它通过封装XML数据来发送请求,并接收XML格式的响应。在使用SoapUI时,了解SOAP消息的基本结构至关重要,包括SOAP Envelope、Header和Body等...

    lock-manager:锁管理器

    笔记在开始安装2.0之前,请先卸载所有1.x应用程序和设备类型。 仅在您已经卸载旧版本的Lock Manager之后再安装此软件。 我建议在SmartThings IDE中卸载该应用程序的实例。问题? 在提问。建议/错误? 在创建故障单。...

    gorm-standalone-example-2_4_x:Gorm独立示例-Spring Boot

    验证错误转换的资源包( src/main/resources/message.properties ) 配置( src/main/resources/log4j.properties ) 陷阱 依赖关系解析和GORM(某些特定的GORM版本可能会发现某些Spring Framework版本中缺少的...

Global site tag (gtag.js) - Google Analytics