我有两个不同的类可以说:
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获取数据后,类型将匹配,我可以更新列表视图。
这就是我寻找最快最简单的数据移动方式的原因。
答案 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);
}
}
请注意,您不应该让字段Name
和Surname
以大写字母开头并公开发布!
答案 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)
我不知道您的方案的详细信息。但我看到两个选择:
亲切的问候
P.S。我还建议您检查一下 - https://source.android.com/source/code-style.html