【Groovy】Groovy 动态语言特性 ( Groovy 中函数实参自动类型推断 | 函数动态参数注意事项 )
生活随笔
收集整理的這篇文章主要介紹了
【Groovy】Groovy 动态语言特性 ( Groovy 中函数实参自动类型推断 | 函数动态参数注意事项 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 前言
- 一、Groovy 中函數實參自動類型推斷
- 二、函數動態參數注意事項
- 三、完整代碼示例
前言
Groovy 是動態語言 , Java 是靜態語言 ;
本篇博客討論 Groovy 中 , 函數實參的自動類型推斷 ;
一、Groovy 中函數實參自動類型推斷
定義兩個不同的類 Student 和 Worker , 在類中都定義 hello 方法 ;
class Student {def hello(){println "Hello Student"} }class Worker {def hello(){println "Hello Worker"} }聲明一個方法 , 接收參數 object , 暫不指定參數類型 , 在函數中調用參數對象的 hello 方法 ;
void fun(object) {object.hello() }分別向該 fun 函數中傳入 Student 和 Worker 對象 , 則會分別調用對應類中的 hello 方法 ;
fun(new Student()) fun(new Worker())二、函數動態參數注意事項
這里要特別注意 , 不要傳遞錯誤的對象 , 如果類中沒有定義 hello 方法 , 編譯時可以編譯通過 , 但是運行時會報錯 ;
如 : 定義了一個沒有 hello 方法的類 ,
class Farmer {}該該類實例對象傳入 fun 方法作為參數 ,
fun(new Farmer())就會報如下錯誤 :
Caught: groovy.lang.MissingMethodException: No signature of method: Farmer.hello() is applicable for argument types: () values: [] Possible solutions: sleep(long), sleep(long, groovy.lang.Closure), getAt(java.lang.String), each(groovy.lang.Closure), split(groovy.lang.Closure), wait() groovy.lang.MissingMethodException: No signature of method: Farmer.hello() is applicable for argument types: () values: [] Possible solutions: sleep(long), sleep(long, groovy.lang.Closure), getAt(java.lang.String), each(groovy.lang.Closure), split(groovy.lang.Closure), wait()at Worker$hello.call(Unknown Source)at Groovy.fun(Groovy.groovy:17)at Groovy$fun.callCurrent(Unknown Source)at Groovy.run(Groovy.groovy:22)為了避免上述問題 , 可以在函數上使用 @TypeChecked 注解 , 但是相應的 , 也就失去了 Groovy 語言的動態性 ;
@TypeChecked void fun(Student object) {object.hello() }三、完整代碼示例
完整代碼示例 :
class Student {def hello(){println "Hello Student"} }class Worker {def hello(){println "Hello Worker"} }class Farmer {}void fun(object) {object.hello() }fun(new Student()) fun(new Worker())// 下面的用法會報 Caught: groovy.lang.MissingMethodException 異常 //fun(new Farmer())執行結果 :
Hello Student Hello Worker總結
以上是生活随笔為你收集整理的【Groovy】Groovy 动态语言特性 ( Groovy 中函数实参自动类型推断 | 函数动态参数注意事项 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Groovy】Groovy 动态语言特
- 下一篇: 【错误记录】Groovy 函数参数动态类