我不太清楚你的意思,但我猜someMethod
打電話給toString
對其給定的對象數組的元素。
如果是這種情況,那麼您可以使用ForeighObject
的包裝子類包含fobjects
的每個元素,其中包含預期的toString
方法。
例如
//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依賴於其他方法的行爲/包裝的實例的屬性,那麼你就需要讓他們在工作像預期的那樣重寫這些方法..
你說你不能改變'ForeighObject'的結構,但是你至少能看到源代碼嗎?如果是這樣,它可能有助於創建一個能夠從「ForeighObject」實例初始化自己的子類。或者,'ForeighObject'類是否有一個構造函數,它將另一個'ForeighObject'作爲參數來克隆它? – jazzbassrob