将数据从一个类型对象注入另一个类型

时间:2015-06-10 07:13:24

标签: java class object

我有两个不同的类可以说:

public class Customer {
    public String Name;
    public String Surname;
}

public class CustomerExtended {
    public String Name;
    public String Surname;
    public int number;
}

现在假设我有一个Customers数组,我想将它注入到CustomerExtended数组中。因此名称和姓氏数据将被转移。 我知道我可以这样做:

for (int i; i<CustomerArray.length; i++)
{
    CustomerExtended temp = new CustomerExtended();
    temp.Name = CustomerArray[i].Name;
    temp.Surname = CustomerArray[i].Surname;
    CustomerExtendedArray.add(temp);
}

但我要问的是,如果有更简单的方法,因为结构是相同的,除了添加的字段。我知道在c#中有一种方法所以我认为应该有一种方式在JAVA我找不到它。 :/任何人都知道方式,可以给我一个例子吗?

编辑: 以上只是一个简单的例子。为什么我需要这个是因为我有一个Android应用程序,我几乎在任何地方使用类,我需要对某些特殊情况进行更新。在这种情况下,我首先必须使用本地数据填充列表视图,并等待来自同一类型但具有2个附加字段的Web服务的数据。因此,我需要扩展我的本地类型并将当前数据注入其中。因此,在我从webservice获取数据后,类型将匹配,我可以更新列表视图。

这就是我寻找最快最简单的数据移动方式的原因。

4 个答案:

答案 0 :(得分:2)

您可以使用Apache Commons BeanUtils库。在课程BeanUtils中,有以下方法(引自https://commons.apache.org/proper/commons-beanutils/apidocs/org/apache/commons/beanutils/BeanUtils.html):

  

static void copyProperties(Object dest,Object orig)

     

对于属性名称相同的所有情况,将属性值从原始bean复制到目标bean。

这适用于bean,所以你应该添加getter和setter。

答案 1 :(得分:1)

你可以使用继承来做到这一点:

public class Customer {
    public String Name;
    public String Surname;
}

public class CustomerExtended extends Customer {
    public int number;
}

然后创建并填充客户列表

List<Customer> customerArray = new ArrayList<>();
Customer c = new Customer();
CustomerExtended d = new CustomerExtended();
customerArray.add(c);
customerArray.add(d);

然后您可以使用此列表:

for(Customer customer:customerArray){
    if(customer instanceof Customer){
        Customer e = (Customer)customer;
        //Do your work here...
    }

    if(customer instanceof CustomerExtended){
        CustomerExtended f = (CustomerExtended)customer;
        //Access number:
        System.out.println(f.number);
    }
}

请注意,您不应该让字段NameSurname以大写字母开头并公开发布!

答案 2 :(得分:1)

您可以这样做,但您需要为此添加Gson库。你的两个类如下我在其中添加构造函数来添加几个项目:

public class Customer{
        public String Name;
        public String Surname;

        public Customer(String Name, String Surname){
            this.Name = Name;
            this.Surname = Surname;
        }
    }

    public class CustomerExtended{
        public String Name;
        public String Surname;
        public int number;
    } 

现在您可以将customer的数组转换为customerExtended,如下所示:

  //Adding data to array:
    Customer[] customers = new Customer[3];
            for(int i=0 ; i < customers.length ; i++){
                customers[i] = new Customer("Name"+i, "Surname"+i);
            }


//Here you can convert Customer object to CustomerExtended object
    try{
         JsonElement jsonElement = new Gson().toJsonTree(customers);
         CustomerExtended[] array = new Gson().fromJson(jsonElement, CustomerExtended[].class);
         Log.d("test", array.toString());
       }catch(Exception e){
         e.printStackTrace();
       }
  

注意:这可以从AnyJson String到任何json对象完成,可以从webservice中获取包含部分或全部字段的

答案 3 :(得分:0)

我不知道您的方案的详细信息。但我看到两个选择:

  1. CustomerExtended扩展Customer类(继承它)并仅添加 - http://www.javacoffeebreak.com/java104/java104.html 您还可以使用CustomerExtended的构造函数来接收作为参数Customer。 还要考虑使字段受保护(不公开)并为其设置getter和setter
  2. 对于需要完全分离的情况(我认为不是你的情况)的另一种常见方法是使用一个实用程序类来将Customer转换为CustomerExtended
  3. 亲切的问候

    P.S。我还建议您检查一下 - https://source.android.com/source/code-style.html