从Java中返回的方法对象创建新对象
大家好,希望你们能帮忙 我有一个方法,它返回我的一个自定义对象。 此对象包含ArrayList和字符串 我想创建一个与方法返回的对象类型相同的新对象,该对象包含与返回的信息相同的信息 我的问题是,我可以按照下面的步骤创建这个对象的一个新实例吗从Java中返回的方法对象创建新对象,java,android,oop,Java,Android,Oop,大家好,希望你们能帮忙 我有一个方法,它返回我的一个自定义对象。 此对象包含ArrayList和字符串 我想创建一个与方法返回的对象类型相同的新对象,该对象包含与返回的信息相同的信息 我的问题是,我可以按照下面的步骤创建这个对象的一个新实例吗 public received_data_object XmlresponseParse(String Response) { received_data_object received_data_object_instance = new r
public received_data_object XmlresponseParse(String Response) {
received_data_object received_data_object_instance = new received_data_object();
//Process some XML and add the item to the list.
received_data_object_instance.addTo_List("SomeText");
return received_data_object_instance;
}
那么从调用classes方法,我可以说:
received_data_object received_data_object_otherInstance = new received_data_object();
received_data_object_otherInstance = XmlresponseParse("SomeXMLString");
我关心的是,我是否真的创建了一个新的对象实例,或者我是否向新对象传递了一个对返回对象的引用,因此现在两者都将被“链接”
是否最好只创建我的新对象,然后访问返回对象中的getter并将值复制到新对象
我很担心,因为所有的东西都说应该将代码从类中的方法中分离出来,但同时,所有的东西似乎都是通过引用原始对象来复制的
提前谢谢 下面提到的代码创建一个新对象(第一个对象): received_data_object received_data_object_instance=新接收的_data_object() 以下代码将导致在方法内创建另一个新对象(第二个对象): 接收的_数据_对象_其他实例=XmlresponseParse(“SomeXMLString”) 当上述调用返回时,接收到的_data_object_otherInstance将指向第二个对象。您的第一个对象没有在任何地方使用,也不需要 因此,您只需要这一行,它应该可以正常工作:
received_data_object received_data_object_instance=XmlresponseParse(“SomeXMLString”) 您表达的
XmlresponseParse
(请更改为XmlresponseParse
方法名称应以小写字母开头)包含其他代码听起来像是在接收的\u数据\u对象中设置其他变量
(请将其重命名为ReceivedDataObject
对象的第一个字母应为大写,并符合java标准)
这个答案应该基于xmlResponseParse
方法的责任是什么
ReceivedDataObject
对象ReceivedDataObject
的其他字段变量是否设置在调用方法中的xmlResponseParse
之外?如果是这样,您应该创建调用方法的实例,并将其传递给xmlResponseParse
方法,并在方法中对该对象的实例进行操作(即不要在xmlresponsepasse
中使用new
)
这看起来有点像
public void callingMethodSetSomeFields() {
ReceivedDataObject receivedData = new ReceivedDataObject();
// set some of the values for ReceivedDataObject in calling method
//now set a ton of values for ReceivedDataObject using xmlResponseParse method
xmlResponseParse(receivedData, "SomeXMLString");
}
public void xmlResponseParse(ReceivedDataObject receivedDataObject, String response) {
//in here we are setting a ton of fields for receivedDataObject
//notice we are operating on the instance of ReceivedDataObject that was passed to us.
receivedDataObject.addToList(response);
}
或者是否将ReceivedDataObject
的所有字段变量都设置在XmlresponseParse
中?如果是,请使用XmlresponseParse
在调用方法中创建ReceivedDataObject
的实例(即不要在调用方法中使用new
)
看起来是这样的
public void callingMethodDoesntSetAnyFields(){
ReceivedDataObject receivedData = xmlResponseParse("SomeXMLString");
}
public ReceivedDataObject xmlResponseParse(String response) {
//in here we are setting all of the fields for receivedDataObject
//notice we are creating an instance of ReceivedDataObject.
ReceivedDataObject receivedData = new ReceivedDataObject();
receivedData.addToList(response);
return receivedData;
}
此外,在这种情况下,您也可以吃蛋糕。如果您确定需要这两种类型的
xmlResponseParse
。假设callingMethod1使用第一种版本,而某些调用method2使用第二种版本。您可以覆盖xmlResponseParse
方法,并且两者都需要,因为它们具有不同的签名s、 请仔细阅读Java命名约定:遵循这些约定将使其他Java开发人员更容易阅读您的代码。不要在调用代码中首先创建新对象。您只需在一行之后丢弃引用即可。只需将变量分配给解析方法的输出即可。是否有其他方法您没有显示的xmlResponseParse
中的逻辑?是否只需将addTo_List
添加到arraylist中就可以了?如果是这种情况,我认为将其提取到一个方法中是不必要的。我喜欢干净的代码,但我认为这会增加更多的混乱而不是清晰度。在任何一种情况下,您都不应该创建一个对象的ew实例。除非您使用的是不可变对象,而这不是实现此目标的正确方法。xmlResponseParse的职责是什么method@MarquisBlount-是的,还有更多的代码,对象中有XML响应字符串变量,但我没有显示它们,因为它们遵循相同的原则在对象中,我使用Set和Get for each,ArrayList很简单,因此我可以很容易地去掉对象中的方法。职责是在xml中进行字符串解析,将这些值传递给对象,然后返回对象,以允许我在代码中的其他地方进一步使用这些值。@user3263740好的,我明白了你现在正在问。看我的回答这很有意义…我基本上是在创建一个冗余对象。那么你能确认一下,这个新对象会引用从被调用方法返回的对象吗?是的,它会。因为你正在将从方法返回的对象分配给新对象,所以新对象将指向同一个对象实例在这个方法中被使用。哇,谢谢你的回答。我想这对我来说实际上是一个小小的启示。@user3263740没问题,如果你觉得这个答案回答了你的问题,别忘了投赞成票/接受它。如果你还有其他问题,请告诉我。所以我想我在这里问的是显而易见的问题,但是如果你每次都提出新的a=b,你就是just创建一个引用相同内存空间的对象,你怎么会创建一个真正的“新”对象,它有自己的内存空间,而没有引用?我想,在大多数情况下,传递一个引用到一个对象会否定这样做的必要性,但是如果你以后想这样做呢