0

私は持っています

class ForeighObject {...}
void someMethod(Object[]) {...}

ForeighObject[] fobjects = SomeStorage.getObjects();

私はfobjectsでしか操作できないので、またはの構造を変更することはできForeighObjectませんsomeMethod。要素をコピーせずForeighObject.toStringにそれを渡すために(たとえば)どのようにオーバーライドできますか?1つのメソッドのみをオーバーライドするためにsomeMethod「提示」できるアダプタクラスを作成できますか?ForeighObject

4

1 に答える 1

1

私はあなたが何を意味するのかよくわかりませんが、それが与えられたオブジェクトの配列の要素をsomeMethod呼び出すと推測しています。toString

この場合、期待されるメソッドを含むfobjectsラップされたサブクラスを使用して、の各要素をラップできます。ForeighObjecttoString

例えば

//Subclass which wraps a ForeighObject instance..
class ForeighObjectWrapper extends ForeighObject {
    ForeighObject wrapped;
    ForeighObjectWrapper(ForeighObject toWrap){
       super(/* get values from toWrap */);
        this.wrapped = toWrap;
    }
    //Add the custom behaviour..
    public String toString(){
         return "Some custom behaviour: " + wrapped.toString();
    }
}

ForeighObject[] fobjects = SomeStorage.getObjects();  //as before..
ForeighObject[] fobjectsWrapped = new ForeighObject[fobjects.length];
for(ForeighObject ob : fObjects){
    fobjectsWrapped.add(new ForeighObjectWrapper(ob));
}

//then call someMethod on fobjectsWrapped instead of fobjects..
someMethod(fobjectsWrapped); //will invoke custom behaviour..

someMethod がラップされたインスタンスの他のメソッド/プロパティの動作にも依存している場合は、期待どおりに動作するようにこれらのメソッドをオーバーライドする必要があることに注意してください。

于 2012-11-07T15:51:05.937 に答える