我有一个由Hibernate生成的Java类,它代表一个表
示例:
public class Customer implements java.io.Serializable {
private static final long serialVersionUID = -9144431342277803632L;
private BigDecimal customerid;
private String custcompanyname;
private String firstname;
private String lastname;
private String address;
... <getters and setters>
}
我想做的是创建一个使用上面列出的属性子集的类。例如:
public class CustomerShortInfo {
private BigDecimal customerid;
private String firstname;
private String AddInNewFieldHere; << add in new field that is Not part of Customer
... <getters and setters>
}
为了做这样的事情:
List<CustomerShortInfo> = List<Customer>
我试图避免创建一个遍历List的循环,以便手动进行分配。我已经看到一个人可以做一个“子类” - 但是 - 据我所知,这将需要类似的东西:
public class CustomerShortInfo extends Customer {
private BigDecimal customerid;
private String firstname;
... <getters and setters>
}
同样,“Customer”是由Hibernate创建的添加/删除的类 表中的行。 Customer的每个属性都匹配一列 数据库表。
结果如下:
List<CustomerShortInfo> shortcustomerlist;
List< ? extends Customer> longcustomerlist = shortcustomerlist;
所需要的是分配方向相反。以下示例为:
List<CustomerShortInfo> = List<Customer>
可以这样做吗?如果是这样,怎么样?
TIA
更新2
有没有可靠的方法让代码在下面工作?截至目前,我得到以下内容:
线程“main”中的异常java.lang.ClassCastException: ccinfw.main.test.First不能强制转换为ccinfw.main.test.Second at ccinfw.main.test.TestAssign.main(TestAssign.java:22)
public class TestAssign {
public static void main(String[] args) {
List<First> firstList = new ArrayList<>();
First firstitem = new First();
firstList.add(firstitem);
List<Second> secondList = new ArrayList<>();
secondList = (List<Second>)(List<?>) firstList;
System.out.println(" A is " + secondList.get(0).getA());
System.out.println(" B is " + secondList.get(0).getB());
System.out.println(" X is " + secondList.get(0).getX());
System.out.println(" Z is " + secondList.get(0).getZ());
}
}
class Second {
int b = 3000;
int a = 4000;
int z = 5000;
int x = 9000;
public int getA() { return a; }
public int getB() { return b; }
public int getZ() { return z; }
public int getX() { return x; }
}
class First {
int b = 30;
int a = 40;
int c = 10;
int d = 20;
int e = 80;
int f = 90;
public int getC() { return c; }
public int getD() { return d; }
public int getE() { return e; }
public int getF() { return f; }
public int getA() { return a; }
public int getB() { return b; }
}
更新1
在这种情况下使用子类不适用于我想要做的事情。使用子类时,可以从子类(Customer)
访问超类( CustomerShortInfo )
的所有属性。 CustomerShortInfo
的属性需要单独使用/使用。当提到A是B的子类时,它只是描述了情况。
例如,如果A类具有以下属性:
length
height
width
weight
color
manufacturer
和B类具有属性 重量 生产厂家 NumberOfTires
请注意“超级班级”中的“NumberOfTires”不是
然后,如果执行了以下行:
B = copy of (A)
然后我会有
weight <<<< values comes from A
manufacturer <<<< value comes from A
NumberOfTires <<<< Value Not Set from A (since it is not there)
为什么从A复制时会设置“制造商”和“重量”? 因为它们具有相同的属性名称。如果我被赋予了“打印B的所有属性”的任务。
如果我有一个任务要打印出B的属性所有,我会得到:
weight, manufacturer, NumberOfTires
而不是
ALL of the attributes of A + NumberOfTires
如果这样的副本不可能,那么在循环遍历列表(在本例中为Customer)时,必须使用许多“getter”和“setter”来完成这项工作。这就是我试图避免的。
因此,非常感谢任何有关如何做到这一点的建议。
答案 0 :(得分:0)
为了得到我需要做的事,做完了,我用了Dozer。完成工作后我所遵循的链接如下。
{{1}}