2011-01-16 17 views
2

は私が機能Groovyで暗黙の型変換をオーバーロードすることはできますか?

def method1(MyClass2 mc2) {...} 

を持って言うと、私はタイプMyClass1のオブジェクトとそれを呼び出します。 MyClass1からMyClass2に暗黙的に変換する方法を指定できる方法があるので、メソッド呼び出しが明示的にmethod1(mc1 as MyClass2)と言うことなく動作するようになりますか?

答えて

4

MyClass1がMyClass2を実装/拡張していない場合、古いスタンバイJavaメソッドのオーバーロードがなくても "as MyClass2"変換を実行することはわかりません。明示的MyClass1含むシグネチャを持つメソッドをオーバーロード:

def method1(MyClass1 mc1) { 
    method1(mc1 as MyClass2) 
} 

他、よりグルーヴィー、選択肢はそれはあなたがMyClass2のインスタンスを持っていることを要求しないように明示的に法1を入力しないことです。

def method1(mc) { 
    // do stuff and let mc walk/talk/quack like MyClass2 
    // or even do the "as MyClass2" in this method if you need it for something further down. 
} 
+3

'Object asType(Class clazz)'メソッドをオーバーライドして、 'myObj1 as MyClass2'を扱うカスタムコンバータを書くことができますhttp://mrhaki.blogspot.com/2009/11/groovy-goodness-define-your-own -type.html –

関連する問題