Java将基类转换为扩展类

时间:2015-07-30 09:36:45

标签: java

我有一个在我的项目中广泛使用的类作为某种字段持有者。类似的东西:

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
}

3 个答案:

答案 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;
}