2017-06-11 8 views
1

私はインターフェイスとそのインターフェイスのメソッドを実装するクラスを持っていますが、implementsキーワードを使用していません。このため、クラスのインスタンスでas -coercionを使用します。これはこれまで意図したとおりに動作しましたが、実際のインスタンスではなくプロキシで呼び出されるtoString()では機能しません。Groovyプロキシ(as-coercionから)toString()を委譲します。

は、次の例を考えてみましょう:

class CoercionToString { 

    public static main(String[] args) { 
     A a = new A(); 
     a.foo(); 
     println a; 

     B b = new A() as B; 
     b.foo(); 
     println b; 
    } 
} 

class A { 
    void foo() { 
     println "foo" 
    } 

    @Override 
    public String toString() { 
     return "bar"; 
    } 
} 

interface B { 
    void foo() 
} 

これは、次のような出力生成:

foo 
bar 
foo 
[email protected] 

を私はtoString()を上書きできるようにしたいが、それがされて - 他の方法とは違って - 実際に委任ではありませんオブジェクト。プロキシオブジェクトがそのように動作するようにする方法はありますか?

答えて

0

これは代わりにintefraceの形質を使用して私の作品:

class CoercionToString { 

    public static main(String[] args) { 
     B b = new A() as B; 
     b.foo(); 
     println b; 
     println b.toString(); 
    } 
} 

class A { 

    void foo() { 
     println "foo" 
    } 

    @Override 
    public String toString() { 
     return "bar"; 
    } 

} 

trait B { 
    public abstract void foo() 
    public abstract String toString() 
} 
+0

を、それが混在JavaとGroovyのプロジェクトだからインターフェースの使用が必要とされています。 'toString()'サポートが必要な場合は、明示的に 'implements'キーワードを明示的に使用します。 –

関連する問題