【Groovy】Groovy 动态语言特性 ( Groovy 中函数实参自动类型推断 | 函数动态参数注意事项 )
文章目錄
- 前言
- 一、Groovy 中函數(shù)實(shí)參自動類型推斷
- 二、函數(shù)動態(tài)參數(shù)注意事項(xiàng)
- 三、完整代碼示例
前言
Groovy 是動態(tài)語言 , Java 是靜態(tài)語言 ;
本篇博客討論 Groovy 中 , 函數(shù)實(shí)參的自動類型推斷 ;
一、Groovy 中函數(shù)實(shí)參自動類型推斷
定義兩個(gè)不同的類 Student 和 Worker , 在類中都定義 hello 方法 ;
class Student {def hello(){println "Hello Student"} }class Worker {def hello(){println "Hello Worker"} }聲明一個(gè)方法 , 接收參數(shù) object , 暫不指定參數(shù)類型 , 在函數(shù)中調(diào)用參數(shù)對象的 hello 方法 ;
void fun(object) {object.hello() }分別向該 fun 函數(shù)中傳入 Student 和 Worker 對象 , 則會分別調(diào)用對應(yīng)類中的 hello 方法 ;
fun(new Student()) fun(new Worker())二、函數(shù)動態(tài)參數(shù)注意事項(xiàng)
這里要特別注意 , 不要傳遞錯(cuò)誤的對象 , 如果類中沒有定義 hello 方法 , 編譯時(shí)可以編譯通過 , 但是運(yùn)行時(shí)會報(bào)錯(cuò) ;
如 : 定義了一個(gè)沒有 hello 方法的類 ,
class Farmer {}該該類實(shí)例對象傳入 fun 方法作為參數(shù) ,
fun(new Farmer())就會報(bào)如下錯(cuò)誤 :
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)為了避免上述問題 , 可以在函數(shù)上使用 @TypeChecked 注解 , 但是相應(yīng)的 , 也就失去了 Groovy 語言的動態(tài)性 ;
@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())// 下面的用法會報(bào) Caught: groovy.lang.MissingMethodException 異常 //fun(new Farmer())執(zhí)行結(jié)果 :
Hello Student Hello Worker總結(jié)
以上是生活随笔為你收集整理的【Groovy】Groovy 动态语言特性 ( Groovy 中函数实参自动类型推断 | 函数动态参数注意事项 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Groovy】Groovy 动态语言特
- 下一篇: 【错误记录】Groovy 函数参数动态类