Java父子对象属性赋值问题:现有父类Father类,子类Son类继承于Father类,现要求将父类对象的属性值全部赋予给子类,如果通过子类对象.set(父类对象.get属性),那势必相当麻烦。

那么,有没有更加方便的API呢?Spring提供了BeanUtils.copyProperties();可以实现该功能。

父类Father类的属性如下:

@Data
class Father {
    private int hight;

    @Override
    public String toString() {
        return "{\"Father\":{" + "\"hight\":" + hight + "}}";
    }
}

子类Son类的属性如下:

@Data
class Son extends Father {
    private int weight;

    @Override
    public String toString() {
        return "{\"Son\":{" + "\"weight\":" + weight + "},\"super-Son\":" + super.toString() + "}";
    }
}

现创建父类对象并给该对象属性赋值,现在将父对象的属性拷贝给子类,错误的代码如下:

        Father father = new Father();
        father.setHight(180);
        //报ClassCastException异常
        Son son = (Son) father;
        son.setWeight(60);
        System.err.println(son.toString());

运行程序,发现报错:类型转换异常!

使用BeanUtils.copyProperties()实现代码如下:

Father father = new Father();
father.setHight(180);
//报ClassCastException异常
Son son = new Son();
BeanUtils.copyProperties(father, son);
son.setWeight(60);
System.err.println(son.toString());

执行代码发现父类对象的属性值已被复制到子类对象中,不需要set、get那么麻烦。

注意:这是Spring提供的API,一定要在Spring环境中测试!

 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐