Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何像显示其他对象的数组一样显示对象数组_Java - Fatal编程技术网

Java 如何像显示其他对象的数组一样显示对象数组

Java 如何像显示其他对象的数组一样显示对象数组,java,Java,我有 及 我只能使用fobjects进行操作,因此我既不能更改ForeighObject的结构,也不能更改someMethod。如何重写ForeighObject.toString(例如)将其传递给someMethod,而不复制元素?我可以创建一些适配器类,它可以“present”ForeighObject来只覆盖一个方法吗?我不太清楚你的意思,但我猜someMethod在给定对象数组的元素上调用toString 如果是这种情况,则可以使用包含预期的toString方法的ForeighObjec

我有


我只能使用fobjects进行操作,因此我既不能更改
ForeighObject
的结构,也不能更改
someMethod
。如何重写
ForeighObject.toString
(例如)将其传递给
someMethod
,而不复制元素?我可以创建一些适配器类,它可以“present”
ForeighObject
来只覆盖一个方法吗?

我不太清楚你的意思,但我猜
someMethod
在给定对象数组的元素上调用
toString

如果是这种情况,则可以使用包含预期的
toString
方法的
ForeighObject
的包装子类包装
foobjects
的每个元素

e、 g


请注意,如果someMethod还依赖于包装实例的其他方法/属性的行为,那么您需要重写这些方法,以便它们按预期工作。

您说您不能更改
ForeighObject
的结构,但是您至少可以看到源代码吗?如果是这样,它可能有助于创建一个子类,该子类能够从
ForeighObject
实例初始化自身。或者,
ForeighObject
类是否有一个构造函数,该构造函数将另一个
ForeighObject
作为参数来克隆它?是的,我用这种方式解决了它(除了使用合成)。但是我想避免这种情况:
for(ForeighObject:fObjects){fobjectsWrapped.add(newforeighobjectwrapper(ob));}
class ForeighObject {...}
void someMethod(Object[]) {...}
ForeighObject[] fobjects = SomeStorage.getObjects();
//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..