父对象属性怎么统一处理?

作者站长头像
站长
· 阅读数 9

有个父类对象User(name,age)子对象:UserA(a)子对象:UserB(b)需要在不同场景处理A和B中 User对象共有的属性,这个有什么办法和思路吗?A和B对象中的a、b属性是有值的

回复
1个回答
avatar
test
2024-07-14

“使用同一个方法,处理不同对象相同属性”所以方法的参数,应该包括:

  1. 多个对象
  2. 相同属性的处理方法
  3. 处理需要的参数
void oneToMany(List<T> objs, String propMethod, String [] args)

然后为了一次调用,多处运行,这里需要几个前提

  1. 所有的对象都继承了同一个父类
  2. 需要执行的处理方法, 方法定义在父类,保证每个对象都有此方法(具体实现可以在子类)
public abstract class User{
   public void modifyProp(String args);
}

public class UserA extends User{
    public void modifyProp(String args){
         this.name = "UserA:"+name;
    }
}

public class UserB extends User{
    public void modifyProp(String args){
         this.name = "UserB:"+name;
    }
}

然后我们借助反射,实现oneToMany中循环调用每个对象的propMethod方法

public void oneToMany(List<User> objs, String propMethod, String args){
 for(User user : objs){
    try {
       User.class.getMethod(propMethod).invoke(user,args);
    } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
      e.printStackTrace();
    }
 }
}

试试使用

public static void main(String []args){
     UserA userOne = new UserA();
     UserB userTwo = new UserB();
     List<User> users = new ArrayList();
     users.add(userOne);
     users.add(userTwo);
     oneToMany(users, "modifyProp", "nameString")
}
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容