在Java中通过引用传递的新对象引用

时间:2012-06-14 06:09:23

标签: java object

第1类

private void checkDuplicateCustomer(BulkCustomerVO bulkCustomerVO) {
    PagedDuplicateCustomerVO duplicateCustomerVO = new PagedDuplicateCustomerVO();
    duplicateCustomerVO.setCustomer(bulkCustomerVO.getCustomerVO());
    duplicateCustomerVO = getCustomerBO().getDuplicateCustomerDetails(duplicateCustomerVO);
    if (!MyUtils.isNull(duplicateCustomerVO)) {
        if (duplicateCustomerVO.isValid()) {

             // some operation
            bulkCustomerVO.setErrorDetals(...........)

        }

    }
}

第2类

public PagedDuplicateCustomerVO getDuplicateCustomerDetails(PagedDuplicateCustomerVO pagedDuplicateCustomer) {
    PagedDuplicateCustomerVO pagedDuplicateCustomerVO = pagedDuplicateCustomer;

        // some operation that changes customerVO reference in pagedDuplicateCustomer

    }
}

在上面的方案中,BulkCustomerVOCustomerVO个实例。它被设置为PagedDuplicateCustomerVO并作为参数传递 改为getDuplicateCustomerDetails()方法。这些更改会影响checkDuplicateCustomer方法中的流程。

我想要做的是在customerVO bulkCustomerVO.getCustomerVO()中创建一个单独的checkDuplicateCustomer实例,该实例专用于getDuplicateCustomerDetails,因此第二类中的任何更改都不会影响我的流量在第1课。

我能做什么将所有字段从bulkCustomerVO.getCustomerVO()复制到新CustomerVO,但VO很大,我不想这样做。这将是我班上不需要的代码。

那么,我该如何处理这种情况?

编辑 - 我不能使用克隆因为这会导致改变我的VO以实现克隆

3 个答案:

答案 0 :(得分:3)

参见http://commons.apache.org/beanutils/api/org/apache/commons/beanutils/BeanUtils.html#copyProperties(java.lang.Object,java.lang.Object)

也许这就是你想要的。

==================

public PagedDuplicateCustomerVO getDuplicateCustomerDetails(PagedDuplicateCustomerVO pagedDuplicateCustomer) {

    CustomerVO customer = new CustomerVO();
    BeanUtils.copyProperties(customer, pagedDuplicateCustomer.getCustomerVO());
    pagedDuplicateCustomer.setCustomer(customer);
    return pagedDuplicateCustomer;

}

答案 1 :(得分:0)

您可以尝试进行克隆。为此,PagedDuplicateCustomerVO必须实现接口Clonnable接口。然后,您可以在对象上调用clone方法以获得浅层克隆。

答案 2 :(得分:0)

我已经解决了这个问题。通过使用SerializationUtils的克隆utiles。

duplicateCustomerVO.setCustomer((CustomerVO) SerializationUtils
                .clone(bulkCustomerVO.getCustomerVO()));