我有一个在我的项目中广泛使用的类作为某种字段持有者。类似的东西:
class A
{
private String field = null;
private String field2 = null;
private String field3 = null;
// and its generic Getters and Setters
}
在代码的某些部分,我需要在此类中添加其他字段。所以我做了这个
class B extends A
{
private String fieldInB = null;
// and its Getters and Setters
}
在我的功能中我认为我可以轻松做到
public void foo( A a )
{
B b = (B)a;
}
我可以将所有字段都写在a
对象中,我可以轻松地在b
中设置字段并使用它。这种接缝就像一个常见的问题,但我只是不知道怎么做,除非采用非常难看的方法:
public B( A a )
{
// copy all the fields one at the time
}
答案 0 :(得分:4)
您正在混淆Java的不同部分:
B b = (B)a;
这是经典的类转换,但要使用B
类对象,您需要:
1。确保a
属于B
类(使用instanceof
java关键字进行检查:
if (a instanceof B) {
B b = (B) a;
}
2。或者在a
类对象中创建B
(使用B
复制字段创建a
类对象。
PS在大多数Java编码约定中,建议仅按具体值填充字段(而不是填充默认的JavaVM值 - null
s)
将A
类字段复制到新实例的简便方法:
public A (A a) {
this.field = a.field;
this.field2 = a.field2;
this.field3 = a.field3;
}
和B班:
public B (A a) {
super(a);
}
另一种方式 - 与bean一起使用A
类和B
类的一些库。您可以在Toilal的回答
答案 1 :(得分:2)
您可以使用Dozer。它允许将bean属性值从一个bean类映射到另一个bean类。
答案 2 :(得分:1)
Hai john其实我没有得到你的确切要求。我重新编写你编写这段代码的方式是不对的。 私有变量无法继承。如果需要将值扩展到子类,则应将这些变量声明为public。
public B(A a)
{
super.field=a.field;
super.field2=a.field2;
super.field3=a.field3;
}