Java集合向上造型案例

Java向上造型很多人都不陌生,但封装为集合后再向上造型,还能行么?

先说结论,可以。

案例:

首先是父类

public class Person {
    private String name;
    private int age;
    private boolean flag = false;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public boolean isFlag() {
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }

    @Override
    public String toString() {
        final StringBuffer sb = new StringBuffer("Person{");
        sb.append("name='").append(name).append('\'');
        sb.append(", age=").append(age);
        sb.append(", flag=").append(flag);
        sb.append('}');
        return sb.toString();
    }
}

然后是基类

public class Man extends Person{
    private String manKind;

    public Man() {
    }

    public String getManKind() {
        return manKind;
    }

    public void setManKind(String manKind) {
        this.manKind = manKind;
    }

    @Override
    public String toString() {
        final StringBuffer sb = new StringBuffer("Man{");
        sb.append("name='").append(getName()).append('\'');
        sb.append(", age=").append(getAge());
        sb.append(", flag=").append(isFlag());
        sb.append(", manKind='").append(manKind);
        sb.append('}');
        return sb.toString();
    }
}

业务场景:

两个接口传递过来的集合,一个是Man类型,一个是Person类型,希望能将集合中部分元素的flag属性修改为true

笨办法是写两个函数,分开使用

但这里我试了一下,是可以直接使用一个函数简单的完成这业务的

public static void main(String[] args) {
        
        ArrayList<Man> manList = new ArrayList<>();
        for (int i = 0; i <3 ; i++) {
            Man man = new Man();
            man.setName("name"+i);
            man.setAge(11+i);
            man.setManKind("kind"+i*2);
            manList.add(man);
        }

        System.out.println(manList);
        Map map = new HashMap<String,Object>();
        map.put("manList",manList);

        // 类型转换
        ArrayList<Person> personArrayList = (ArrayList<Person>) map.get("manList");
        for (int i = 0; i < personArrayList.size(); i++) {
            Person person = personArrayList.get(i);
            person.setAge(person.getAge()+1);
            person.setFlag(true);
            System.out.println(person);
        }
        System.out.println(manList);
    }

测试结果:

[Man{name='name0', age=11, flag=false, manKind='kind0}, Man{name='name1', age=12, flag=false, manKind='kind2}, Man{name='name2', age=13, flag=false, manKind='kind4}]
Man{name='name0', age=12, flag=true, manKind='kind0}
Man{name='name1', age=13, flag=true, manKind='kind2}
Man{name='name2', age=14, flag=true, manKind='kind4}
[Man{name='name0', age=12, flag=true, manKind='kind0}, Man{name='name1', age=13, flag=true, manKind='kind2}, Man{name='name2', age=14, flag=true, manKind='kind4}]

总结来说,即使是子类集合,也可以强转为父类集合后做属性修改,这样原始的集合元素就能完成属性修改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值