Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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_Android_Oop - Fatal编程技术网

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

从Java中返回的方法对象创建新对象,java,android,oop,Java,Android,Oop,大家好,希望你们能帮忙 我有一个方法,它返回我的一个自定义对象。 此对象包含ArrayList和字符串 我想创建一个与方法返回的对象类型相同的新对象,该对象包含与返回的信息相同的信息 我的问题是,我可以按照下面的步骤创建这个对象的一个新实例吗 public received_data_object XmlresponseParse(String Response) { received_data_object received_data_object_instance = new r

大家好,希望你们能帮忙

我有一个方法,它返回我的一个自定义对象。 此对象包含ArrayList和字符串

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

我的问题是,我可以按照下面的步骤创建这个对象的一个新实例吗

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创建一个引用相同内存空间的对象,你怎么会创建一个真正的“新”对象,它有自己的内存空间,而没有引用?我想,在大多数情况下,传递一个引用到一个对象会否定这样做的必要性,但是如果你以后想这样做呢