1

単一のJavaオブジェクトのメソッドシグネチャを変更する正しい方法は何ですか。toStringメソッドを変更したいとします。

myObject.metaClass.toString = { pritln "hello world" }

このコードには問題があるようです。オブジェクトを他のJavaコンパイル済みオブジェクトに渡すと、元のオブジェクトtoStringが呼び出されます。

他のソリューションはラッパーを作成しますObject。元のクラスとはクラスが違うので満足できません


追加:
1。作成プロセスを制御できません
2.オブジェクトがどのようにインスタンス化されたかわかりません

それで、この問題を解決するためのグルービーな方法はありませんか?唯一の解決策は、Javaラッパークラスを作成し、すべてのメソッドをラップして1つを変更することです。これは ...

4

4 に答える 4

4

単一のメソッドが変更されたオブジェクトを作成したい場合は、「匿名クラス」を使用してそれを行う方法があります。

オブジェクトを作成するときはいつでも:

MyClass myObject = new MyClass() {
    public String toString() {
        ...implementation...
    }
}
于 2012-11-13T22:20:46.273 に答える
3

迷惑なサブクラスを使用できますか?toString()これは、その単一インスタンスのメソッドのみをオーバーライドします。

MyObject myObject= new MyObject (){
    @Override
    public String toString (){
         println "hello world"
    }
};
于 2012-11-13T22:20:19.133 に答える
2

metaClassに加えた変更は、groovyにのみ表示されます。

javaはmetaClassが存在することを認識していないため、明らかにそれによって定義された置換メソッドを呼び出すことはできません。

于 2012-11-13T22:19:47.933 に答える
0

オリジナルを拡張するラッパーを作成します。

public class wrapper extends myObject{
    public toString{
        System.out.println("hello world");
    }
}
于 2012-11-13T22:21:12.543 に答える