Java 活动中的两个对象,修改其中一个会自动修改另一个

Java 活动中的两个对象,修改其中一个会自动修改另一个,java,android-studio,object,Java,Android Studio,Object,在Android Studio中,我正在编写一个活动,允许用户修改一个名为product的特定对象。用户还可以选择保存所做的修改。我的目标是,当用户想要离开活动,并且修改尚未保存时,会显示一个通知,告知用户修改尚未保存 为此,我实施了以下步骤: 在OnCreate方法中,创建对象product的副本,称为savedProduct 当用户修改值时,这些更改将应用于产品 当用户保存修改时,product的值存储在savedProduct中 当用户想要离开活动时,会比较对象product和savedP

在Android Studio中,我正在编写一个活动,允许用户修改一个名为
product
的特定对象。用户还可以选择保存所做的修改。我的目标是,当用户想要离开活动,并且修改尚未保存时,会显示一个通知,告知用户修改尚未保存

为此,我实施了以下步骤:

  • OnCreate
    方法中,创建对象
    product
    的副本,称为
    savedProduct
  • 当用户修改值时,这些更改将应用于
    产品
  • 当用户保存修改时,
    product
    的值存储在
    savedProduct
  • 当用户想要离开活动时,会比较对象
    product
    savedProduct
    。当它们不同时,会通知用户
  • 问题在于,每当修改
    产品
    中的字段时,这些更改都会自动应用于
    保存的产品
    。这是一个问题,因为它们现在总是相等的,
    savedProduct
    不再保存保存的数据

    我认为问题在于如何初始化
    savedProduct
    。下面是我如何尝试初始化
    savedProduct
    的几个示例

    Product product, savedProduct;
    
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activitylayout);
    
        Intent intent = getIntent();
        Bundle bundle = intent.getExtras();
        if (bundle != null) {
            product = (Product) bundle.getSerializable("product");
            if (product != null) {
                savedProduct = product;
            }
        }
    }
    

    当用户修改值时,修改按以下方式存储到
    产品中

    product.setName(nameEditText.getText().toString().trim());
    product.setPrice(priceEditText.getText().toString().trim());
    

    当你这样做的时候:

    productUpToDate = product;
    
    productUpToDate = (Product) SerializationUtils.clone(product);
    
    您必须记住,这两个变量现在只是引用同一个对象。当你修改一个,它将修改另一个。你可以这样做:

    productUpToDate = product;
    
    productUpToDate = (Product) SerializationUtils.clone(product);
    

    当你这样做的时候:

    productUpToDate = product;
    
    productUpToDate = (Product) SerializationUtils.clone(product);
    
    您必须记住,这两个变量现在只是引用同一个对象。当你修改一个,它将修改另一个。你可以这样做:

    productUpToDate = product;
    
    productUpToDate = (Product) SerializationUtils.clone(product);
    

    我在代码中没有看到任何对
    SavedProduct
    的引用。请让问题和代码保持一致。哦,那是个错误,现在已经修复了!我在代码中没有看到任何对
    SavedProduct
    的引用。请让问题和代码保持一致。哦,那是个错误,现在已经修复了!