从Java中的返回方法对象创建新对象

时间:2015-10-15 22:33:18

标签: java android oop

大家好,希望你能帮忙。

我有一个返回我的自定义对象的方法。 该对象包含ArrayList和Strings。

我想创建一个从该方法返回的相同类型的新对象,该对象包含返回的相同信息。

我的问题是,我可以按照以下方式创建此对象的新实例吗?

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;
}

然后从调用类方法,我可以说:

received_data_object received_data_object_otherInstance = new received_data_object();
received_data_object_otherInstance = XmlresponseParse("SomeXMLString");

我关心的是,我实际上是在创建对象的新实例,还是我将新对象传递给返回的对象的引用,因此两者现在都将被“链接”?

最好只创建我的新对象,然后访问返回对象中的getter并将值复制到新对象上?

我很担心,因为一切都说你应该从像这样的类中的方法中分离你的代码,但同时,所有东西似乎都是通过引用原始对象来复制的。

提前致谢。

2 个答案:

答案 0 :(得分:2)

您已表达XmlresponseParse(请更改为xmlResponseParse方法名称应以小写字母开头)包含其他代码声音,例如在received_data_object中设置其他变量(请将此处重命名为{{ 1}}对象的第一个字母应为大写,每个java标准camalHumpNotation

本答案应基于您ReceivedDataObject方法的责任。现在你给方法两个职责是

  1. 负责初始化xmlResponseParse个对象
  2. 负责设置此对象的部分或全部字段。
  3. 这就是决定的方式:

    调用方法中ReceivedDataObject的其他字段变量是否设置在ReceivedDataObject之外?如果是这样,你应该创建一个调用方法的实例并将其传递给你的xmlResponseParse方法,并在你的方法中操作该对象的实例(即不要在{{xmlResponseParse中使用new 1}})

    这看起来像。

    xmlResponseParse

    全部 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; } 。让我们说callingMethod1使用第一个版本,一些调用method2使用第二个版本。您可以覆盖xmlResponseParse方法,因为它们具有不同的签名,所以两者都有。

答案 1 :(得分:0)

下面提到的代码创建了一个新对象(第一个对象):

received_data_object received_data_object_instance = new received_data_object();

以下代码将导致在方法(第二个对象)中创建另一个新对象:

received_data_object_otherInstance = XmlresponseParse(“SomeXMLString”);

当上述调用返回时,received_data_object_otherInstance将指向第二个对象。您的第一个对象不会在任何地方使用,也不需要。

因此,您只需要这一行,它应该可以正常工作:

received_data_object received_data_object_instance = XmlresponseParse(“SomeXMLString”);